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

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


当前回答

这段代码将停止所有图像为centos:6的容器。我找不到更简单的解决办法了。

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

或者更短:

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

其他回答

这段代码将停止所有图像为centos:6的容器。我找不到更简单的解决办法了。

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

或者更短:

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

如果你知道容器名称的一部分,你可以使用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 ps -q --filter ancestor=<image-name> )

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

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

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

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

我创建了一个/usr/local/bin/docker。接收映像名称的Stop(假设只有一个正在运行)。

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