如何使用不同的命令启动停止的 Docker 容器?

新手上路,请多包涵

我想用不同的命令启动一个停止的 Docker 容器,因为默认命令会崩溃——这意味着我无法启动容器然后使用“docker exec”。

基本上我想启动一个外壳,这样我就可以检查容器的内容。

幸运的是,我使用 -it 选项创建了容器!

原文由 aaa90210 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 255
2 个回答

找到您停止的容器 ID

 docker ps -a

提交已停止的容器:

此命令将修改后的容器状态保存到新映像 user/test_image

 docker commit $CONTAINER_ID user/test_image

使用不同的入口点启动/运行:

 docker run -ti --entrypoint=sh user/test_image

入口点参数说明: https ://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime

笔记:

上面的步骤只是启动一个具有相同文件系统状态的停止容器。这非常适合快速调查。但是环境变量、网络配置、附加卷和其他人员不会被继承,您应该明确指定所有这些参数。

已从此处借用启动已停止容器的步骤:(最后评论) https://github.com/docker/docker/issues/18078

原文由 Dmitriusan 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进