C# Windows服务在docker容器中启动后立即关闭
我有一个用C# Windows服务在docker容器中启动后立即关闭,c#,docker,windows-services,docker-for-windows,docker-desktop,C#,Docker,Windows Services,Docker For Windows,Docker Desktop,我有一个用C编写的windows服务,它继承自ServiceBase。 我曾尝试在容器中安装该服务(也作为控制台应用程序运行),但它在守护程序模式下几秒钟后关闭。如果我以交互方式运行它(-it),那么它将保持运行OnStop,但我无法确定在守护进程模式下调用它的是什么 我与ping一起运行以保持容器的活动: docker run -d --name myapptest myapp ping -t localhost docker文件: FROM microsoft/dotnet-framewo
C
编写的windows服务,它继承自ServiceBase
。
我曾尝试在容器中安装该服务(也作为控制台应用程序运行),但它在守护程序模式下几秒钟后关闭。如果我以交互方式运行它(-it
),那么它将保持运行<调用了code>OnStop,但我无法确定在守护进程模式下调用它的是什么
我与ping一起运行以保持容器的活动:
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
有误解解释得很好,所以请检查一下 尝试更改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 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
我猜你放无限循环是为了让容器保持活力,但这真的不需要,所以我把它拿了出来。你是在docker的交互模式下运行它吗?当我在交互模式下运行它时,它工作了。我不想在交互模式下运行它,但我认为您可能对此有误解: