按映像名称停止 Docker 个容器 - Ubuntu
Stopping Docker containers by image name - Ubuntu
在 Ubuntu 14.04 (Trusty Tahr) 我正在寻找停止 运行ning 容器的方法,我唯一的信息是 [=] 中使用的图像名称16=] 运行 命令。
是否有命令找到所有匹配的 运行ning 容器匹配该图像名称并停止它们?
如果您知道 image:tag
确切的容器版本
在 issue 8959 之后,一个好的开始是:
docker ps -a -q --filter="name=<containerName>"
由于 name
指的是 容器 而不是图像名称,因此您需要使用更新的 Docker 1.9 filter ancestor, mentioned in koekiebox's answer.
docker ps -a -q --filter ancestor=<image-name>
正如下面 kiril 评论的那样,删除这些容器:
stop
returns the containers as well.
所以链接 stop
和 rm
就可以完成工作:
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
如果您只知道图片名称(不知道image:tag
)
如Alex Jansen points out in the comments:
The ancestor option does not support wildcard matching.
Alex proposes a solution,但我设法 运行,当你有 多个 个容器时 运行ning 来自同一图像是(例如在你的 ~/.bashrc
中):
dsi() { docker stop $(docker ps -a | awk -v i="^.*" '{if(~i){print}}'); }
然后我就调用我的 bash session(采购 ~/.bashrc
之后):
dsi alpine
来自 alpine.*:xxx
的任何容器 运行ning 都会停止。
含义:任何名称为 starting with alpine
.
的图像
如果你想让 ^.*
更精确,你可能需要调整 awk -v i="^.*"
。
当然是从那里开始:
drmi() { docker rm $(dsi | tr '\n' ' '); }
并且 drmi alpine
会停止 并删除 任何 alpine:xxx
容器。
您可以使用 ps
命令查看 运行 个容器:
docker ps -a
从那里您应该可以看到您的容器名称以及您要查找的容器 ID。 Here's more information about docker ps
.
我制作了一个包含图像名称的 /usr/local/bin/docker.stop
(假设您只有一个 运行)。
docker stop $(docker ps -q -f "name=")
之前的答案对我不起作用,但这个答案:
docker stop $(docker ps -q --filter ancestor=<image-name> )
我试图将我的 Docker 命令包装在 gulp 任务中,并意识到您可以执行以下操作:
docker stop container-name
docker rm container-name
这可能不适用于您有多个同名容器的情况(如果可能的话),但对于我的用例来说它是完美的。
您可以启动容器并设置容器名称:
docker run -d --name <container-name> <image-name>
同一个镜像可以用来启动多个容器,所以这是启动一个容器的好方法。然后你可以使用这个容器名称来停止,附加......容器:
docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
此代码将停止 所有 个带有映像 centos:6 的容器。我找不到更简单的解决方案。
docker ps | grep centos:6 | awk '{print }' | xargs docker stop
或更短:
docker stop $(docker ps -a | grep centos:6 | awk '{print }')
停止运行容器的两种方法:
1. $docker stop container_ID
2. $docker kill container_ID
您可以使用以下命令获取 运行 个容器:
$docker ps
点击以下链接了解更多信息:
在我的例子中 --filter ancestor=<image-name>
没有工作,所以下面的命令为我清理了 Docker 容器:
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
对于 Docker 版本 18.09.0
我发现不需要格式标志
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
这应该够了。
按镜像名称停止 docker 容器:
imagename='mydockerimage'
docker stop $(docker ps | awk '{split(,image,":"); print , image[1]}' | awk -v image=$imagename ' == image {print }')
按镜像名称和标签停止docker容器:
imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename ' == image {print }')
如果您创建了图像,则可以向其添加 label 并按标签过滤 运行 个容器
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 }'
有问题,因为图像名称可能出现在其他图像的其他列中
列出所有容器及其信息和 ID
docker ps
docker stop CONTAINER ID
除了@VonC 出色的答案之外,还有一个 ZSH 函数,您可以将其添加到 .zshrc 文件中:
dockstop() {
docker rm $(docker stop $(docker ps -a -q --filter ancestor="" --format="{{.ID}}"))
}
然后在您的命令行中,只需执行 dockstop myImageName
,它将停止并删除所有从名为 myImageName 的映像启动的容器。
使用:docker 容器停止 $(docker container ls -q --filter ancestor=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$
如果您想更喜欢简单的 AWK
方法,这是我的做法:
docker rm -f $(docker ps | awk '{ if( == "<your image name>") { print $NF}}')
$(docker ps | awk '{ if( == "<your image name>") { print $NF}}')
- 根据输入图像
打印 docker 容器名称
docker ps
- 列出所有容器
awk '{ if( == "<your-image-name>") { print $NF}}'
- docker ps
的第二个解析列给出了图像名称。将它与您的图像名称进行比较将执行 print $NF
打印容器名称。
docker rm -f
删除容器
例如,删除 ubuntu 图像的所有 运行 容器,可以简单地完成:
docker rm -f $(docker ps | awk '{ if( == "ubuntu:latest") { print $NF}}')
PS: 请记住在 AWK 中包含图像标签,因为它是一个相等的比较器。
这是我重建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 }' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest
注意 --no-trunc 参数,它在输出中完整显示图像名称或其他信息
这是一个简洁的命令,不需要您指定图像标签(大多数答案都需要):
docker stop $(docker ps -a | awk -v i="^${image_name}.*" '{if(~i){print}}')
如果您知道容器名称的一部分,您可以将 AWK 与 docker 一起使用,如下所示:
CONTAINER_IDS=$(docker ps -a | awk '( ~ /container.*/) {print }')
if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
echo "No containers available for deletion"
else
docker rm -f $CONTAINER_IDS
fi
这将仅停止 所有图像为“yourImgName”的容器:
sudo docker stop $(sudo docker ps | grep "yourImgName" | cut -d " " -f 1)
这将停止并移除 所有图像为“yourImgName”的容器:
sudo docker rm $(sudo docker stop $(sudo docker ps -a | grep "yourImgName" | cut -d " " -f 1))
在 Ubuntu 14.04 (Trusty Tahr) 我正在寻找停止 运行ning 容器的方法,我唯一的信息是 [=] 中使用的图像名称16=] 运行 命令。
是否有命令找到所有匹配的 运行ning 容器匹配该图像名称并停止它们?
如果您知道 image:tag
确切的容器版本
在 issue 8959 之后,一个好的开始是:
docker ps -a -q --filter="name=<containerName>"
由于 name
指的是 容器 而不是图像名称,因此您需要使用更新的 Docker 1.9 filter ancestor, mentioned in koekiebox's answer.
docker ps -a -q --filter ancestor=<image-name>
正如下面 kiril 评论的那样,删除这些容器:
stop
returns the containers as well.
所以链接 stop
和 rm
就可以完成工作:
docker rm $(docker stop $(docker ps -a -q --filter ancestor=<image-name> --format="{{.ID}}"))
如果您只知道图片名称(不知道image:tag
)
如Alex Jansen points out in the comments:
The ancestor option does not support wildcard matching.
Alex proposes a solution,但我设法 运行,当你有 多个 个容器时 运行ning 来自同一图像是(例如在你的 ~/.bashrc
中):
dsi() { docker stop $(docker ps -a | awk -v i="^.*" '{if(~i){print}}'); }
然后我就调用我的 bash session(采购 ~/.bashrc
之后):
dsi alpine
来自 alpine.*:xxx
的任何容器 运行ning 都会停止。
含义:任何名称为 starting with alpine
.
的图像
如果你想让 ^.*
更精确,你可能需要调整 awk -v i="^.*"
。
当然是从那里开始:
drmi() { docker rm $(dsi | tr '\n' ' '); }
并且 drmi alpine
会停止 并删除 任何 alpine:xxx
容器。
您可以使用 ps
命令查看 运行 个容器:
docker ps -a
从那里您应该可以看到您的容器名称以及您要查找的容器 ID。 Here's more information about docker ps
.
我制作了一个包含图像名称的 /usr/local/bin/docker.stop
(假设您只有一个 运行)。
docker stop $(docker ps -q -f "name=")
之前的答案对我不起作用,但这个答案:
docker stop $(docker ps -q --filter ancestor=<image-name> )
我试图将我的 Docker 命令包装在 gulp 任务中,并意识到您可以执行以下操作:
docker stop container-name
docker rm container-name
这可能不适用于您有多个同名容器的情况(如果可能的话),但对于我的用例来说它是完美的。
您可以启动容器并设置容器名称:
docker run -d --name <container-name> <image-name>
同一个镜像可以用来启动多个容器,所以这是启动一个容器的好方法。然后你可以使用这个容器名称来停止,附加......容器:
docker exec -it <container-name> bash
docker stop <container-name>
docker rm <container-name>
此代码将停止 所有 个带有映像 centos:6 的容器。我找不到更简单的解决方案。
docker ps | grep centos:6 | awk '{print }' | xargs docker stop
或更短:
docker stop $(docker ps -a | grep centos:6 | awk '{print }')
停止运行容器的两种方法:
1. $docker stop container_ID
2. $docker kill container_ID
您可以使用以下命令获取 运行 个容器:
$docker ps
点击以下链接了解更多信息:
在我的例子中 --filter ancestor=<image-name>
没有工作,所以下面的命令为我清理了 Docker 容器:
docker rm $(docker stop $(docker ps -a -q --filter "name=container_name_here" --format="{{.ID}}"))
对于 Docker 版本 18.09.0 我发现不需要格式标志
docker rm $(docker stop $(docker ps -a -q -f ancestor=<image-name>))
docker stop $(docker ps -a | grep "zalenium")
docker rm $(docker ps -a | grep "zalenium")
这应该够了。
按镜像名称停止 docker 容器:
imagename='mydockerimage'
docker stop $(docker ps | awk '{split(,image,":"); print , image[1]}' | awk -v image=$imagename ' == image {print }')
按镜像名称和标签停止docker容器:
imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename ' == image {print }')
如果您创建了图像,则可以向其添加 label 并按标签过滤 运行 个容器
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 }'
有问题,因为图像名称可能出现在其他图像的其他列中
列出所有容器及其信息和 ID
docker ps
docker stop CONTAINER ID
除了@VonC 出色的答案之外,还有一个 ZSH 函数,您可以将其添加到 .zshrc 文件中:
dockstop() {
docker rm $(docker stop $(docker ps -a -q --filter ancestor="" --format="{{.ID}}"))
}
然后在您的命令行中,只需执行 dockstop myImageName
,它将停止并删除所有从名为 myImageName 的映像启动的容器。
使用:docker 容器停止 $(docker container ls -q --filter ancestor=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$
如果您想更喜欢简单的 AWK
方法,这是我的做法:
docker rm -f $(docker ps | awk '{ if( == "<your image name>") { print $NF}}')
$(docker ps | awk '{ if( == "<your image name>") { print $NF}}')
- 根据输入图像
docker ps
- 列出所有容器
awk '{ if( == "<your-image-name>") { print $NF}}'
- docker ps
的第二个解析列给出了图像名称。将它与您的图像名称进行比较将执行 print $NF
打印容器名称。
docker rm -f
删除容器
例如,删除 ubuntu 图像的所有 运行 容器,可以简单地完成:
docker rm -f $(docker ps | awk '{ if( == "ubuntu:latest") { print $NF}}')
PS: 请记住在 AWK 中包含图像标签,因为它是一个相等的比较器。
这是我重建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 }' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest
注意 --no-trunc 参数,它在输出中完整显示图像名称或其他信息
这是一个简洁的命令,不需要您指定图像标签(大多数答案都需要):
docker stop $(docker ps -a | awk -v i="^${image_name}.*" '{if(~i){print}}')
如果您知道容器名称的一部分,您可以将 AWK 与 docker 一起使用,如下所示:
CONTAINER_IDS=$(docker ps -a | awk '( ~ /container.*/) {print }')
if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then
echo "No containers available for deletion"
else
docker rm -f $CONTAINER_IDS
fi
这将仅停止 所有图像为“yourImgName”的容器:
sudo docker stop $(sudo docker ps | grep "yourImgName" | cut -d " " -f 1)
这将停止并移除 所有图像为“yourImgName”的容器:
sudo docker rm $(sudo docker stop $(sudo docker ps -a | grep "yourImgName" | cut -d " " -f 1))