根据 docker 镜像名称删除所有容器

解决方案:

要删除所有基于 centos:7的 docker 容器,请运行以下 linux 命令:

# docker ps -a | awk '{ print $1,$2 }' | grep centos:7 | awk '{print $1 }' | xargs -I {} docker rm {}

说明:

首先,我们需要获取所有容器 ID:

# docker ps -a
CONTAINER ID IMAGE        COMMAND      CREATED      STATUS     PORTS        NAMES
16ef47387cbd fedora:21    "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         romantic_heisenberg    
6ae3e3870739 centos:7     "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         clever_rosalind 
effd4037ab74 centos:7     "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         backstabbing_almeida   
72c89af47615 debian:8     "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         berserk_pasteur 
195c78f3eb0b debian:8     "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         cocky_yonath    
f060a5bfdb11 debian:8     "/bin/bash"  5 hours ago  Exited (0) 5 hours ago         insane_galileo

为了避免图像和容器名称之间的混淆,我们可以只保留 CONTAINER IDIMAGE列:

# docker ps -a | awk '{ print $1,$2 }'
CONTAINER ID
16ef47387cbd fedora:21
6ae3e3870739 centos:7
effd4037ab74 centos:7
72c89af47615 debian:8
195c78f3eb0b debian:8
f060a5bfdb11 debian:8

接下来,我们可以将上述输出通过管道传递给 grep命令,以仅过滤那些基于特定图像名称的容器。
例如,让我们根据 centos:7图像过滤所有容器:

# docker ps -a | awk '{ print $1,$2 }' | grep centos:7
6ae3e3870739 centos:7
effd4037ab74 centos:7

此时我们只对 CONTAINER ID感兴趣:

# docker ps -a | awk '{ print $1,$2 }' | grep centos:7 | awk '{print $1 }'
6ae3e3870739
effd4037ab74

最后,我们可以使用 xargs并删除剩余的容器 ID:

# docker ps -a | awk '{ print $1,$2 }' | grep centos:7 | awk '{print $1 }' | xargs -I {} docker rm {}
6ae3e3870739
effd4037ab74

问题:

如何根据 docker 镜像名称删除所有 docker 容器。
我不想删除所有可用的容器,只删除那些基于特定图像的容器。
例如,我想删除基于图像 centos:7的所有容器。

日期:2020-07-07 20:54:49 来源:oir作者:oir