在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
当前回答
使用: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$
其他回答
停止运行容器的两种方法:
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容器:
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}'
是否有问题,因为图像名称可能出现在其他图像的其他列中
我创建了一个/usr/local/bin/docker。接收映像名称的Stop(假设只有一个正在运行)。
docker stop $(docker ps -q -f "name=$1")
在我的例子中——filter祖宗=<image-name>没有工作,所以下面的命令为我清理Docker容器:
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
这只会停止所有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))