Служба Windows завершает работу сразу после запуска в Docker-контейнере - PullRequest
0 голосов
/ 11 января 2019

У меня есть служба 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 Ответ

0 голосов
/ 04 февраля 2019

Я думаю, у вас может быть неправильное представление о 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

Полагаю, вы поставили этот бесконечный цикл, чтобы сохранить контейнер, но это действительно не нужно, поэтому я вынул его.

...