我想用不同的命令启动一个停止的 Docker 容器,因为默认命令会崩溃——这意味着我无法启动容器然后使用“docker exec”。
基本上我想启动一个外壳,这样我就可以检查容器的内容。
幸运的是,我使用 -it 选项创建了容器!
原文由 aaa90210 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想用不同的命令启动一个停止的 Docker 容器,因为默认命令会崩溃——这意味着我无法启动容器然后使用“docker exec”。
基本上我想启动一个外壳,这样我就可以检查容器的内容。
幸运的是,我使用 -it 选项创建了容器!
原文由 aaa90210 发布,翻译遵循 CC BY-SA 4.0 许可协议
编辑此文件(对应于您停止的容器):
vi /var/lib/docker/containers/923...4f6/config.json
更改“路径”参数以指向您的新命令,例如 /bin/bash。您还可以设置“Args”参数以将参数传递给命令。
重新启动 docker 服务(注意这将停止所有正在运行的容器,除非您首先启用 live-restore ):
service docker restart
列出您的容器并确保命令已更改:
docker ps -a
启动容器并附加到它,你现在应该在你的 shell 中!
docker start -ai mad_brattain
使用 Docker 1.7.1 在 Fedora 22 上工作。
注意: 如果您的 shell 不是交互式的(例如,您没有使用 -it 选项创建原始容器),您可以改为将命令更改为“/bin/sleep 600”或“/bin/tail -f /dev/null”给您足够的时间来执行“docker exec -it CONTID /bin/bash”作为获取 shell 的另一种方式。
注意 2: 较新版本的 docker 具有 config.v2.json,您需要在其中更改 Entrypoint 或 Cmd(感谢 user60561)。
原文由 aaa90210 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答987 阅读✓ 已解决
1 回答706 阅读✓ 已解决
1 回答654 阅读
找到您停止的容器 ID
提交已停止的容器:
此命令将修改后的容器状态保存到新映像
user/test_image
使用不同的入口点启动/运行:
入口点参数说明: https ://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime
笔记:
上面的步骤只是启动一个具有相同文件系统状态的停止容器。这非常适合快速调查。但是环境变量、网络配置、附加卷和其他人员不会被继承,您应该明确指定所有这些参数。
已从此处借用启动已停止容器的步骤:(最后评论) https://github.com/docker/docker/issues/18078