在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
当前回答
我创建了一个/usr/local/bin/docker。接收映像名称的Stop(假设只有一个正在运行)。
docker stop $(docker ps -q -f "name=$1")
其他回答
列出所有带有信息和ID的容器
docker ps
docker stop CONTAINER ID
下面是一个简洁的命令,它不需要你指定图像标签(大多数答案都需要):
Docker stop $(Docker ps -a | awk -v i="^${image_name}. "*“{如果(2美元~我){print $ 1}}”)
如果你想要一个简单的AWK方法,这是我的看法:
docker rm -f $(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')
$(docker ps | awk '{if($2 == "<您的映像名称>"){print $NF}}') -根据输入的映像打印docker容器名称
列出所有的容器
awk '{if($2 == "<you -image-name>") {print $NF}}' - docker ps的第二列给出了图像名称。将其与图像名称进行比较将执行print $NF,打印容器名称。
Docker rm -f删除容器
例如,删除所有运行中的ubuntu镜像容器,可以简单地这样做:
docker rm -f $(docker ps | awk '{ if($2 == "ubuntu:latest") { print $NF}}')
PS:记得在AWK中包含图像标记,因为它是一个相等的比较器。
如果你知道图像:标记准确的容器版本
以下是第8959期,一个好的开始是:
docker ps -a -q --filter="name=<containerName>"
因为name指的是容器而不是镜像名称,你需要使用最新的Docker 1.9过滤器祖先,在koekiebox的回答中提到过。
docker ps -a -q --filter ancestor=<image-name>
正如下面kiril所评论的,要移除这些容器:
Stop也返回容器。
因此,链接stop和rm将完成工作:
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
如果你只知道图像名称(不知道image:tag)
Alex Jansen在评论中指出:
祖先选项不支持通配符匹配。
Alex提出了一个解决方案,但我设法运行的解决方案是,当您从同一个映像运行多个容器时(在您的~/。例如Bashrc):
dsi() { docker stop $(docker ps -a | awk -v i="^$1.*" '{if($2~i){print$1}}'); }
然后我只是调用我的bash会话(在来源~/.bashrc之后):
dsi alpine
还有所有从阿尔卑斯出发的集装箱。*:xxx会停止。
含义:任何名称以alpine开头的图像。 你可能需要调整awk -v i="^$1。如果你想要^$1。更准确地说。
当然,从那里开始:
drmi() { docker rm $(dsi $1 | tr '\n' ' '); }
drmi alpine会停止并删除任何alpine:xxx容器。
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
这应该足够了。