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

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


当前回答

列出所有带有信息和ID的容器

docker ps

docker stop CONTAINER ID

其他回答

如果你知道图像:标记准确的容器版本

以下是第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容器。

如果你知道容器名称的一部分,你可以使用AWK与docker如下:

  CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /container.*/) {print $1}')
  if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
    echo "No containers available for deletion"
  else
    docker rm -f $CONTAINER_IDS
  fi

这只会停止所有image = "yourImgName"的容器:

sudo docker stop $(sudo docker ps | grep "yourImgName" | cut -d " " -f 1)

这将停止并删除所有image = "yourImgName"的容器:

sudo docker rm $(sudo docker stop $(sudo docker ps -a | grep "yourImgName" | cut -d " " -f 1))

适用于Docker 18.09.0版本 我发现不需要格式标志

docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")

这应该足够了。