为什么 Windows docker 容器在睡眠命令完成之前提前退出?
Why does Windows docker container exit early before sleep command finishes?
我正在使用 Windows 服务器 2016 来启动 windowsservercore
docker 容器,我注意到我认为容器退出的不正确行为,即使它应该退出睡超过 15 分钟。我有以下 Dockerfile
:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
我在与 Dockerfile
相同的目录中使用 docker build -t mybuild .
构建容器。然后我 运行 带有 docker run mybuild
的容器,它很快退出。
查看 似乎睡眠应该让容器保持活动状态。该答案显示 Linux 所以不确定这是否重要,但我觉得在任何一种情况下睡眠过程都是 运行ning,这就是决定容器是否应该默认退出的因素
如果我使用交互模式 and/or(我尝试了所有 3 种组合)一个 tty (docker run -it mybuild
) 它会一直运行直到我退出容器的 shell
查看 docker 文档 run
在前台执行容器(如 -it),尽管我不明白为什么这很重要,因为该过程仍应 运行ning 无论容器是否分离。我还尝试 运行 在分离模式下使用 docker run -d
连接它,在这种情况下它也很快退出。
我也试过 运行在睡眠后使用另一个命令,但仍然没有用。 docker 文件看起来像:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
RUN echo "hello" > C:\hello.txt
我查看了 dockerfile reference for RUN
,它说 shell 形式的 RUN
在 Windows 上使用 cmd /S /C
执行命令。所以我在我的主机 Windows 机器上从我的正常 shell 尝试 运行ning 这个,就像 Dockerfile
指定的(cmd /S /C powershell Start-Sleep -s 1000
)并验证它按预期工作.
我在这里有什么不明白的?我是 docker 的新手,正在努力学习,但我不知道搜索互联网和阅读文档是怎么回事
我认为 dockerfile 中的 RUN
命令存在混淆:它没有说明容器启动时 运行 会发生什么,它只是 [=21= 的命令] 构建图像时(如 运行 此安装命令..)。
我认为您正在寻找以下两个选项之一:
dockerfile (doc) 中的 CMD
行:
FROM microsoft/windowsservercore
CMD ["powershell", "Start-Sleep", "-s", "1000"]
或者,您可以从命令行运行它:
docker run -d mybuild <your command>
我正在使用 Windows 服务器 2016 来启动 windowsservercore
docker 容器,我注意到我认为容器退出的不正确行为,即使它应该退出睡超过 15 分钟。我有以下 Dockerfile
:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
我在与 Dockerfile
相同的目录中使用 docker build -t mybuild .
构建容器。然后我 运行 带有 docker run mybuild
的容器,它很快退出。
查看
如果我使用交互模式 and/or(我尝试了所有 3 种组合)一个 tty (docker run -it mybuild
) 它会一直运行直到我退出容器的 shell
查看 docker 文档 run
在前台执行容器(如 -it),尽管我不明白为什么这很重要,因为该过程仍应 运行ning 无论容器是否分离。我还尝试 运行 在分离模式下使用 docker run -d
连接它,在这种情况下它也很快退出。
我也试过 运行在睡眠后使用另一个命令,但仍然没有用。 docker 文件看起来像:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
RUN echo "hello" > C:\hello.txt
我查看了 dockerfile reference for RUN
,它说 shell 形式的 RUN
在 Windows 上使用 cmd /S /C
执行命令。所以我在我的主机 Windows 机器上从我的正常 shell 尝试 运行ning 这个,就像 Dockerfile
指定的(cmd /S /C powershell Start-Sleep -s 1000
)并验证它按预期工作.
我在这里有什么不明白的?我是 docker 的新手,正在努力学习,但我不知道搜索互联网和阅读文档是怎么回事
我认为 dockerfile 中的 RUN
命令存在混淆:它没有说明容器启动时 运行 会发生什么,它只是 [=21= 的命令] 构建图像时(如 运行 此安装命令..)。
我认为您正在寻找以下两个选项之一:
dockerfile (doc) 中的 CMD
行:
FROM microsoft/windowsservercore
CMD ["powershell", "Start-Sleep", "-s", "1000"]
或者,您可以从命令行运行它:
docker run -d mybuild <your command>