我是 Docker
的新手.我想要我的 Windwows-ServerCore
基于容器以定期的时间间隔执行任务。出于这个原因,我决定在我的容器中安装一个服务,它可以定期触发这些任务。
这是我的 dockerfile -
FROM test2
SHELL ["powershell.exe", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]
RUN New-LocalUser -Name "testuser" -Password (ConvertTo-SecureString -AsPlainText "CrackPassword!" -Force) -FullName "Test.User" -Description "LocalAdministrator"
RUN Add-LocalGroupMember -Group administrators -Member testuser -Verbose
RUN "C:/Windows/Microsoft.NET/Framework64/v4.0.30319/InstallUtil.exe" /username=.\testuser /password=CrackPassword! /LogToConsole=true /ShowCallStack TestDockerService.exe
ENTRYPOINT ["powershell"]
CMD Start-Service \""DockerService\""
问题是这个容器启动后就退出了,大概是
Powershell
,作为入口命令,启动服务,并随着它的工作结束,结束,连同它一起关闭容器。如何启用容器,进而使我的服务继续运行?
我读到了
-d
与 docker run
的论点, 这将 detach
容器,所以 docker 将不再监控它,但这也意味着失去对 STDIN
的访问权限等我可能需要。有没有其他方法可以做到这一点,或者是-d
正确的方法?也许另一种选择是从
batch file
启动服务。并在启动命令之后运行一个无限循环,从而使容器保持事件状态?更广泛地说,如何保存
Docker container
运行,即使服务没有运行,通过交互式 session 进行检查和调试,比如说?
最佳答案
Docker 被设计为在其主进程(带有 PID 1
)退出之前一直保持活力。当它发生时,容器被视为已停止。这个主进程通常不应该是后台进程。
您的容器运行 Start-Service
命令,成功注册并启动后台服务并退出 .而且,因为它是您的主要进程,所以容器会停止。
你有不同的方法来保持容器的活力,但所有这些方法最终都会让主进程保持活力。不确定是否使用 Windows 容器,但只需使用 sleep 循环即可。
我想到的第一件事就是拥有ping 127.0.0.1 -t > NUL
脚本末尾的命令。
关于powershell - 尽管有正在运行的服务,Docker 容器仍会退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56217138/