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

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


当前回答

docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")

这应该足够了。

其他回答

在@VonC精彩的回答之上,这里有一个ZSH函数,你可以添加到你的。zshrc文件中:

dockstop() {
  docker rm $(docker stop $(docker ps -a -q --filter ancestor="$1" --format="{{.ID}}"))
}

然后在命令行中,简单地执行dockstop myImageName,它将停止并删除所有从名为myImageName的映像启动的容器。

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

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

你可以使用ps命令查看正在运行的容器:

docker ps -a

从那里,您应该可以看到容器的名称以及您正在寻找的容器ID。这里有更多关于docker ps的信息。

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

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

在我的例子中——filter祖宗=<image-name>没有工作,所以下面的命令为我清理Docker容器:

docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))