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

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


当前回答

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

1. $docker stop container_ID

2. $docker kill container_ID

您可以使用以下命令获取正在运行的容器:

$docker ps

以下链接可获取更多信息:

https://docs.docker.com/engine/reference/commandline/stop/ https://docs.docker.com/v1.8/reference/commandline/kill/

其他回答

使用:docker容器stop $(docker容器ls -q——filter祖宗=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$

通过镜像名称停止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}')

如果您创建了映像,则可以向其添加标签,并根据标签筛选正在运行的容器

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

不可靠的方法

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

并不总是有效

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

根据容器名称筛选,而不是映像名称

docker ps | grep <image-name> | awk '{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中包含图像标记,因为它是一个相等的比较器。

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

1. $docker stop container_ID

2. $docker kill container_ID

您可以使用以下命令获取正在运行的容器:

$docker ps

以下链接可获取更多信息:

https://docs.docker.com/engine/reference/commandline/stop/ https://docs.docker.com/v1.8/reference/commandline/kill/

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

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

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