如何在已经存在的 Docker 容器上运行命令?

新手上路,请多包涵

我用 -d 创建了一个容器,所以它不是交互式的。

 docker run -d shykes/pybuilder bin/bash

我看到容器已经退出:

 CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                      PORTS               NAMES
d6c45e8cc5f0        shykes/pybuilder:latest   "bin/bash"          41 minutes ago      Exited (0) 2 seconds ago                        clever_bardeen

现在我想在机器上运行偶尔的命令并退出。只是为了得到回应。

我试图启动机器。我尝试附加。我以为我可以用容器调用 run ,但这似乎是不允许的。使用 start 似乎只是运行然后快速存在。

退出后我想回到交互模式。

我试过了:

 docker attach d6c45e8cc5f0

但我得到:

 2014/10/01 22:33:34 You cannot attach to a stopped container, start it first

但是,如果我启动它,它就会退出。第 22 条。我赢不了。

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

阅读 477
2 个回答

2014 年 10 月, Docker 团队引入了 docker exec 命令https ://docs.docker.com/engine/reference/commandline/exec/

所以现在你可以在一个正在运行的容器中运行任何命令,只需要知道它的 ID(或名称):

 docker exec -it <container_id_or_name> echo "Hello from container!"

请注意, exec 命令仅适用于已经运行的容器。如果容器当前已停止,则需要先使用以下命令运行它:

 docker run -it -d shykes/pybuilder /bin/bash

这里最重要的是 -d 选项,它代表 detached 。这意味着您最初提供给容器的命令( /bin/bash )将在后台运行,容器不会 _立即停止_。

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

您的容器将 退出,因为您给它的命令将结束。使用以下选项使其保持活动状态:

  • -i 即使没有连接,也保持 STDIN 打开。
  • -t 分配一个伪TTY。

所以你的新 run 命令是:

 docker run -it -d shykes/pybuilder bin/bash

如果您想附加到已经运行的容器:

 docker exec -it CONTAINER_ID /bin/bash

在这些示例中, /bin/bash 用作命令。

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

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