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的交互模式下运行它吗?当我在交互模式下运行它时,它工作了。我不想在交互模式下运行它,但我认为您可能对此有误解: