在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
在Ubuntu 14.04 (Trusty Tahr)上,我正在寻找一种停止运行容器的方法,我所拥有的唯一信息是Docker run命令中使用的映像名称。
是否有一个命令来查找与映像名称匹配的所有正在运行的匹配容器并停止它们?
当前回答
通过镜像名称停止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中包含图像标记,因为它是一个相等的比较器。
适用于Docker 18.09.0版本 我发现不需要格式标志
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-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
停止运行容器的两种方法:
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容器,停止并再次启动它
docker pull [registry]/[image]:latest
docker build --no-cache -t [localregistry]/[localimagename]:latest -f compose.yaml context/
docker ps --no-trunc | grep [localimagename] | awk '{print $1}' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest
注意——no-trunc参数,它在输出中显示图像名称或其他完整的信息