我有一个用C#
编写的Windows服务,该服务继承自ServiceBase
。
我尝试将服务安装在容器中(并且也作为控制台应用程序运行),但是在守护程序模式下几秒钟后它将关闭。如果我间歇性地运行它(-it
),那么它将保持运行状态。 OnStop
被调用,但是我无法确定在守护程序模式下正在调用什么。
我使用ping来使容器保持 Activity 状态:
docker run -d --name myapptest myapp ping -t localhost
docker 文件:
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 }
最佳答案
我认为您可能对RUN
,CMD
和ENTRYPOINT
有误解。
This article很好地解释了这一点,因此请检查一下。
尝试更改您的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
我猜你把那个无限循环保持了容器的生命,但实际上并不需要它,所以我把它拿了出来。
关于c# - Windows服务在Docker容器中启动后立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54149206/