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

时间:2015-08-18 13:35:18

标签: docker ubuntu docker-image

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

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

18 个答案:

答案 0 :(得分:147)

关注issue 8959,一个好的开始是:

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

由于name是指容器而不是图片名称,因此您需要使用Docker 1.9 filter ancestor&#39中提到的更新koekiebox ; s answer

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}}"))

答案 1 :(得分:51)

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

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

答案 2 :(得分:33)

您可以启动容器设置容器名称:

docker run -d --name <container-name> <image-name>

可以使用相同的图像来旋转多个容器,因此这是启动容器的好方法。然后你可以使用这个容器名来停止,附加......容器:

docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>

答案 3 :(得分:13)

此代码将停止所有容器,其图像为 centos:6 。我无法找到更简单的解决方案。

docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop

甚至更短:

docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')

答案 4 :(得分:8)

停止运行容器的两种方法:

1. $docker stop container_ID

2. $docker kill container_ID

您可以使用以下命令运行容器:

$docker ps

以下链接了解更多信息:

答案 5 :(得分:1)

对于Docker 18.09.0版 我发现不需要格式标志

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

答案 6 :(得分:1)

这是一个简洁的命令,它不需要您指定图像标签(大多数答案都是这样做的):

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

答案 7 :(得分:1)

这是我重建docker容器的脚本,停止并重新启动

docker pull [registry]/[image]:latest
docker build --no-cache -t [localregistry]/[localimagename]:latest -f compose.yaml context/
docker ps --no-trunc | grep [localimagename] | awk '{print $1}' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest

注意 --no-trunc 参数,它在输出中以全长显示图像名称或其他信息

答案 8 :(得分:1)

使用: docker container stop $(docker container ls -q --filter ancestor = mongo)

    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    d394144acf3a        mongo               "docker-entrypoint.s…"   15 seconds ago      Up 14 seconds       0.0.0.0:27017->27017/tcp   magical_nobel
    (base) :~ user$ docker container stop $(docker container ls -q --filter ancestor=mongo)
    d394144acf3a
    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    (base) :~ user$

答案 9 :(得分:1)

在@VonC最佳答案的基础上,添加以下ZSH函数,您可以将其添加到.zshrc文件中:

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

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

答案 10 :(得分:1)

在我的情况下--filter ancestor=<image-name>无效,所以以下命令为我清理了Docker容器:

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

答案 11 :(得分:1)

我做了一个/usr/local/bin/docker.stop,它接受​​了图像名称(假设你只有一个正在运行)。

docker stop $(docker ps -q -f "name=$1")

答案 12 :(得分:0)

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

这应该足够了。

答案 13 :(得分:0)

按映像名称停止Docker容器:

imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,":"); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')

按映像名称和标签停止docker容器:

imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')

如果创建了图像,则可以向其中添加label并按标签过滤正在运行的容器

docker ps -q --filter "label=image=$image"

不可靠的方法

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

does not always work

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

按容器名称而不是图像名称进行过滤

docker ps | grep <image-name> | awk '{print $1}'

有问题,因为图像名称可能会出现在其他图像的其他列中

答案 14 :(得分:0)

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

docker ps

docker stop CONTAINER ID

答案 15 :(得分:0)

我试图将我的Docker命令包装在gulp任务中,并意识到你可以执行以下操作:

docker stop container-name
docker rm container-name

这可能不适用于您有多个具有相同名称的容器的情况(如果可能的话),但对于我的用例,它是完美的。

答案 16 :(得分:0)

如果您想使用简单的AWK方法,这是我的看法:

docker rm -f $(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')

$(docker ps | awk '{ if($2 == "<your image name>") { print $NF}}')-根据输入图像打印Docker容器名称

docker ps-列出所有容器

awk '{ if($2 == "<your-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中,因为它是比较器。

答案 17 :(得分:-4)

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

docker ps -a

从那里你应该看到容器的名称以及你正在寻找的容器ID。 Here's more information about docker ps