如何按标签和存储库名称删除 docker 镜像<none>?



我想问是否有可能删除docker图像的标签或创建的标签,我有这样的东西:

Repository                     TAG             IMAGE_ID       CREATED          SIZE
registry.someRegistry.         latest          fa8767676       5 hours ago     119MB
registry.someRegistry.         <none>          878787874       29 hours ago    119MB
registry.someRegistry.         <none>          jkj7jjjk4       2 days ago      119MB
registry.someRegistry.         <none>          d99090iii       3 days ago      119MB

我需要删除所有的图像,但不是最近的一个,在这种情况下是一个标记为最新或最近创建日期的一个。我可以使用下一个命令删除所有的图像,直到5小时的创建,但这是不合适的,因为我可以删除更多的图像不仅仅是最后一个,最好删除图像的标签=最新。

docker image prune -a --force --filter "until=5h"

我还需要一个额外的注册表过滤器,我认为,为了删除我需要的注册表的图像。

好办法实现吗?

最简单的是rmi命令,即:

docker rmi 878787874

这是一个"remove image"命令,并使用您列出的IMAGE_ID。

没有一个回复是有帮助的,似乎也没有另一个线程。虽然太晚了,但我遇到了同样的问题,并找到了这个解决方案:

docker rmi $(docker images | grep "<none>" | grep "registry.someRegistry." | awk {'print $3'})

这不是100%的证明,因为grep标签中查找字符串,所以理论上如果您的注册表名称出现在某些标签中,反之亦然,您可能会意外删除它。

使用

可以从一个特定的存储库中找到所有悬空图像
docker images repository --filter dangling=true

如果您想根据注册表筛选多个存储库,也可以执行

docker images --filter=reference='registry/someRegistry/*:*' --filter dangling=true

一旦你有了你想要删除的列表,你可以这样做:

docker rmi $(docker images --filter=reference='registry/someRegistry/*:*' --filter dangling=true -q)

编辑以添加通配符*不适用于/,因此如果注册表具有更复杂的文件夹结构,则表达式应修改为类似

的内容。
'registry/someRegistry/*/*:*'

你可以用滤镜删除悬空图像

docker images --filter dangling=true

我必须稍微修改命令才能运行:

sudo docker rmi $(sudo docker images | grep "<none>" | awk {'print $3'})

最新更新