Служба Windows завершает работу сразу после запуска в Docker-контейнере
У меня есть служба Windows, написанная в C#
что наследует от ServiceBase
, Я попытался установить службу в контейнере (а также запустить как консольное приложение), но он отключается через несколько секунд в режиме демона. Если я буду запускать это интерактивно (-it
) тогда он продолжает работать. OnStop
вызывается, но я не могу определить, что вызывает его в режиме демона.
Я бежал с ping, чтобы сохранить контейнер:
docker run -d --name myapptest myapp ping -t localhost
файл докера:
FROM microsoft/dotnet-framework
SHELL ["powershell.exe", "-Command", "$ErrorActionPreference = 'Stop';
$ProgressPreference = 'Continue'; $verbosePreference='Continue';"]
RUN net user /add appuser Password1234!
RUN net localgroup administrators appuser /add
RUN New-Item -Path "C:/app" -ItemType directory
WORKDIR /app
COPY ".\hostcode" "C:\app"
RUN "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe"
/username=.\appuser /password=Password1234! /LogToConsole=true /ShowCallStack myapp.exe
RUN SC.exe config MyApp start=auto
CMD POWERSHELL Write-Host Starting container... ; \
while ($true) { Start-Sleep -Seconds 3600 }
1 ответ
Я думаю, что у вас может быть недопонимание RUN
, CMD
, а также ENTRYPOINT
,
Эта статья объясняет это хорошо, так что проверьте это.
Попробуйте изменить файл Docker:
от
RUN SC.exe config MyApp start=auto
CMD POWERSHELL Write-Host Starting container... ; \
while ($true) { Start-Sleep -Seconds 3600 }
в
ENTRYPOINT POWERSHELL Write-Host Starting container... && \
SC.exe config MyApp start=auto
Я предполагаю, что вы поместили этот бесконечный цикл, чтобы сохранить контейнер живым, но это действительно не нужно, поэтому я его убрал.