按映像名称停止 Docker 容器 - Ubuntu

新手上路,请多包涵

在 Ubuntu 14.04 (Trusty Tahr) 上,我正在寻找一种方法来停止正在运行的容器,我拥有的唯一信息是 Docker 运行命令中使用的映像名称。

是否有命令查找与该映像名称匹配的所有匹配的运行容器并停止它们?

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

阅读 491
2 个回答

如果您知道 image:tag 确切的容器版本

issue 8959 之后,一个好的开始是:

 docker ps -a -q --filter="name=<containerName>"

由于 name 指的是 容器 而不是图像名称,因此您需要使用 koekiebox回答 中提到的更新的 Docker 1.9 过滤器祖先

 docker ps -a -q  --filter ancestor=<image-name>


正如 kiril 在下面评论的那样,要删除这些容器:

stop 也返回容器。

所以链接 stoprm 将完成这项工作:

 docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))


如果您只知道图像名称(不知道 image:tag

正如 亚历克斯詹森评论 中指出的那样:

祖先选项 不支持通配符匹配。

Alex 提出了一个解决方案,但是当您从同一个映像运行 多个 容器时,我设法运行的解决方案是(例如在您的 ~/.bashrc 中):

 dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }

然后我只是调用我的 bash 会话(在采购 ~/.bashrc 之后):

 dsi alpine

alpine.*:xxx 运行的任何容器都会停止。

含义:任何名称以 alpine 开头 的图像。

如果您想要 ^$1.* 更精确,您可能需要调整 awk -v i="^$1.*"

当然,从那里:

 drmi() { docker rm $(dsi $1  | tr '\n' ' '); }

并且 drmi alpine 将停止 并删除 任何 alpine:xxx 容器。

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

以前的答案对我不起作用,但确实如此:

 docker stop $(docker ps -q --filter ancestor=<image-name> )

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

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