在 Ubuntu 14.04 (Trusty Tahr) 上,我正在寻找一种方法来停止正在运行的容器,我拥有的唯一信息是 Docker 运行命令中使用的映像名称。
是否有命令查找与该映像名称匹配的所有匹配的运行容器并停止它们?
image:tag
在issue 8959之后,一个好的开始是:
docker ps -a -q --filter="name=<containerName>"
由于name指的是 容器 而不是图像名称,因此您需要使用的回答中提到的更新的Docker 1.9过滤器祖先。
name
docker ps -a -q --filter ancestor=<image-name>
正如kiril在下面评论的那样,要删除这些容器:
stop也返回容器。
stop
所以链接stop并将rm完成这项工作:
rm
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
指出的那样:
选项不支持通配符匹配。
提出了一个解决方案,但是当您从同一个图像运行 _多个_容器时,我设法运行的解决方案是(~/.bashrc例如您的):
~/.bashrc
dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }
然后我只需调用我的 bash 会话(在 sourcing 之后~/.bashrc):
dsi alpine
任何运行的容器alpine.*:xxx都会停止。
alpine.*:xxx
含义:任何名称以. 开头alpine的图像。如果您想更精确, 您可能需要调整。awk -v i="^$1.*"``^$1.*
alpine
awk -v i="^$1.*"``^$1.*
当然,从那里:
drmi() { docker rm $(dsi $1 | tr '\n' ' '); }
adrmi alpine会停止 并移除 任何alpine:xxx容器。
drmi alpine
alpine:xxx