如何通过标记删除Docker图像,最好是通配符?

Gre*_*reg 39 docker

我有一些自动化过程,它们会用一些标记有意义标签的Docker镜像.标签遵循结构化模式.

有没有办法按标签查找和删除图像?假设我有图像:

REPOSITORY                  TAG
junk/root                   stuff_687805
junk/root                   stuff_384962
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够做到:docker rmi -tag stuff_*

有什么好的方法来模拟吗?

Vla*_*-HC 47

仅使用docker过滤:

 docker rmi $(docker images --filter=reference="*:stuff_*" -q)
Run Code Online (Sandbox Code Playgroud)
  • reference="*:stuff_*" 过滤器允许您使用通配符过滤图像;
  • -q 选项仅用于显示图像ID.

  • 这种通配符方法在 docker 版本 20.10.6 中对我不起作用 (6认同)
  • 它的工作方式有点令人惊讶:通配符与斜杠不匹配。即如果你想匹配`abc/xyz:tag`,那么你必须使用`*/*`。简单的“*”不会匹配任何内容。 (4认同)

小智 36

bash的乐趣:

docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3)
Run Code Online (Sandbox Code Playgroud)

  • `aws`或`awk`? (7认同)
  • 为什么不:`docker rmi $(docker images | aws '$2~/stuff_/{print $1}') ` (2认同)

Ruw*_*han 17

仅使用码头工人

docker rmi $(docker images -q junk/root:*)
Run Code Online (Sandbox Code Playgroud)


klo*_*ogd 13

您还可以使用grep + args + xargs来完成它:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs docker rmi
Run Code Online (Sandbox Code Playgroud)
  • docker图像列出了所有图像
  • grep根据搜索"_stuff"选择行
  • awk将打印这些行的第一个和第二个参数(图像名称和标记名称),中间用冒号
  • xargs将使用awk返回的每一行作为参数运行命令'docker rmi'

注意:小心grep搜索,因为它也可以匹配标签之外的东西,所以最好先进行干运行:

docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs -n1 echo
Run Code Online (Sandbox Code Playgroud)
  • xargs -n1 -n1标志意味着xargs不会将awk返回的行组合在一起,而是一次一个地回显它们(为了更好的可读性)