为什么Windows docker容器在sleep命令完成之前提前退出?
我正在使用Windows server 2016启动为什么Windows docker容器在sleep命令完成之前提前退出?,docker,docker-for-windows,Docker,Docker For Windows,我正在使用Windows server 2016启动windowsservercoredocker容器,并注意到容器很快退出时的错误行为,即使它应该休眠超过15分钟。我有以下Dockerfile: FROM microsoft/windowsservercore RUN powershell Start-Sleep -s 1000 我使用docker build-t mybuild.在与Dockerfile相同的目录中构建容器。然后我用docker run mybuild运行容器,它很快退出
windowsservercore
docker容器,并注意到容器很快退出时的错误行为,即使它应该休眠超过15分钟。我有以下Dockerfile
:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
我使用docker build-t mybuild.
在与Dockerfile
相同的目录中构建容器。然后我用docker run mybuild运行容器,它很快退出
看着它,似乎一个睡眠应该保持容器活着。答案是Linux,所以不确定这是否重要,但我觉得无论哪种情况下,休眠进程都在运行,这就是决定容器是否应该在默认情况下退出的原因
如果我使用交互模式和/或(我尝试了所有3种组合)tty(docker run-it mybuild
),它将一直保持到我退出容器外壳
查看docker docsrun
在前台执行容器(如-it),尽管我不明白为什么这很重要,因为不管容器是否分离,进程都应该继续运行。我还尝试用docker run-d
在分离模式下运行它,在这种情况下它也很快退出
我还试着在睡眠后运行另一个命令,但仍然不起作用。docker文件如下所示:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
RUN echo "hello" > C:\hello.txt
我看了一下,它说shell形式的RUN
在Windows上使用cmd/S/C
执行命令。因此,我尝试在我的Windows主机上从我的普通shell运行这个程序,就像Dockerfile
指定的(cmd/S/C powershell Start Sleep-S 1000
)一样,并验证它是否按预期工作
我在这里不明白什么?我是docker的新手,正在努力学习,但我不知道搜索internet和阅读文档是怎么回事,我认为dockerfile中的
RUN
命令有点混乱:它没有说明容器启动时将运行什么,它只是在构建映像时运行的命令(如运行此安装命令..)。
我认为您正在寻找以下两种选择之一:
dockerfile()中的CMD
行:
或者,您可以从命令行运行它:
docker run -d mybuild <your command>
docker运行-d mybuild
我认为dockerfile中的RUN
命令有一个混淆:它没有说明容器启动时将运行什么,它只是在构建映像时运行的一个命令(如RUN this installation command…)。
我认为您正在寻找以下两种选择之一:
dockerfile()中的CMD
行:
或者,您可以从命令行运行它:
docker run -d mybuild <your command>
docker运行-d mybuild