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

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


当前回答

你可以设置一个容器名来启动容器:

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

同一个映像可以用来启动多个容器,因此这是启动容器的好方法。然后你可以使用这个container-name来停止,附加…容器:

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

其他回答

如果你知道容器名称的一部分,你可以使用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

使用: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$

我试图在gulp任务中包装我的Docker命令,并意识到你可以做以下事情:

docker stop container-name
docker rm container-name

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

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

这应该足够了。

这只会停止所有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))