我想问是否有可能删除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'})