dar*_*ing 1 docker docker-for-windows
我正在使用 Windows Server 2016 来启动windowsservercoredocker 容器,并注意到我认为不正确的行为,即容器很快退出,即使它应该休眠超过 15 分钟。我有以下内容Dockerfile:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
Run Code Online (Sandbox Code Playgroud)
docker build -t mybuild .我使用when构建容器与Dockerfile. 然后我运行容器docker run mybuild,它很快就退出了。
看看这个答案,似乎睡眠应该让容器保持活力。这个答案显示的是 Linux,所以不确定这是否重要,但我觉得睡眠进程在任何一种情况下都在运行,这就是决定容器是否应该默认退出的原因
如果我使用交互模式和/或(我尝试了所有 3 种组合) tty ( docker run -it mybuild),它会一直保持状态,直到我退出容器的 shell
查看 docker 文档run会在前台执行容器(如 -it ),尽管我不明白为什么这很重要,因为无论容器是否分离,进程都应该仍在运行。我还尝试以分离模式运行它docker run -d,在这种情况下它也很快退出。
我还尝试在睡眠后运行另一个命令,但仍然不起作用。docker 文件如下所示:
FROM microsoft/windowsservercore
RUN powershell Start-Sleep -s 1000
RUN echo "hello" > C:\hello.txt
Run Code Online (Sandbox Code Playgroud)
我查看了dockerfile 参考RUN,它说以 shell 形式在 Windows 上RUN执行命令。cmd /S /C因此,我尝试从我的 Windows 主机上的普通 shell 中完全按照Dockerfile指定的 ( cmd /S /C powershell Start-Sleep -s 1000) 运行它,并验证它是否按预期工作。
我在这里不明白什么?我是 docker 的新手,正在尝试学习,但我无法弄清楚搜索互联网和阅读文档时发生了什么
我认为 dockerfile 中的命令存在混淆RUN:它没有说明容器启动时将运行什么,它只是构建映像时运行的命令(例如运行此安装命令..)。我认为您正在寻找以下两个选项之一:
CMDdockerfile ( doc ) 中的行:
FROM microsoft/windowsservercore
CMD ["powershell", "Start-Sleep", "-s", "1000"]
Run Code Online (Sandbox Code Playgroud)
或者,您可以从命令行运行它:
docker run -d mybuild <your command>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |