我已经写在C#
从ServiceBase
继承的窗口服务。我曾尝试在容器安装服务(也运行作为控制台应用程序),但它在守护进程模式几秒钟后关闭。如果我运行它interatively(-it
),那么它保持运行。 OnStop
叫,但我不能确定什么是守护进程模式调用它。
我曾与平运行,以保持容器活着:
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 }
我想你可能有一个关于RUN
,CMD
和ENTRYPOINT
误解。
This article解释它舒服,所以检查出来。
试着改变你的搬运工文件:
从
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
我猜你把无限循环,以保持容器还活着,但真的没有必要,所以我拿出来。