为什么Windows docker容器在sleep命令完成之前提前退出?

为什么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运行容器,它很快退出

我正在使用Windows server 2016启动
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 docs
run
在前台执行容器(如-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