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

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


当前回答

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

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

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

其他回答

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

docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.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容器。

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

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 stop $(Docker ps -a | awk -v i="^${image_name}. "*“{如果(2美元~我){print $ 1}}”)