Docker删除<无>标签图像
root@server:~# docker images -a REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> 5e2dfc857e73 5 days ago 261.6 MB <none> <none> d053e988f23d 5 days ago 261.6 MB <none> <none> 1d5d4a2d89eb 5 days ago 261.6 MB <none> <none> ea0d189fdb19 5 days ago 100.5 MB <none> <none> 26c6175962b3 5 days ago 100.5 MB <none> <none> 73d5cec4a0b3 5 days ago 100.5 MB <none> <none> e19590e1bac1 5 days ago 100.5 MB
我已经尝试了以下内容:
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
还有以下几点:
docker rmi $(docker images -f "dangling=true" -q)
获取以下错误:
docker: "rmi" requires a minimum of 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] Remove one or more images
您可以尝试仅列出未标记的图像(没有标签的图像或没有标签的标签):
docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
但是,其他一些未标记的图像可能是其他人需要的。
我喜欢只删除悬挂的图像 :
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
正如我在2016年9月提到的“ 如何移除旧的和未使用的Docker镜像 ”中提到的docker 1.13+,还可以执行image prune
命令 :
docker image prune
这就是说, Janakaclass达拉 在评论中提到:
这并没有删除
<none>
标签的图像(例如foo/bar:<none>
); 我不得不使用docker images --digests
和docker rmi foo/bar@<digest>
Janaka参考Paul V. Novarese的 “ 如何用标签去除签名的图像 ”:
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE pvnovarese/mprime latest 459769dbc7a1 5 days ago 4.461 MB pvnovarese/mprime <none> 459769dbc7a1 5 days ago 4.461 MB
诊断步骤
如果使用
--digests=true
选项 (未标记的条目具有Docker内容信任签名摘要),则可以在这两个条目中看到不同之处:
# docker images --digests=true REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE pvnovarese/mprime latest <none> 459769dbc7a1 5 days ago 4.461 MB pvnovarese/mprime <none> sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00 459769dbc7a1 5 days ago
请注意,保罗还提到了18892 :
拖动签名的图像后,在“
docker images
”输出中会有一个“额外”条目(标签<none>
)。
这使得难以rmi
的形象(你必须强制它,否则首先删除正确标记的条目,或删除按摘要。
泊坞窗图像剪裁删除所有悬挂的图像(那些没有标签)。 泊坞窗图像修剪-a也将删除没有使用它们的容器的任何图像。
悬挂和未使用图像之间的区别在这个stackoverflow线程中解释。
使用以下命令删除none
作为存储库名称的映像:
docker rmi $(docker images | grep "^<none" | awk '{print $3}')
删除none
标签或存储库名称的图像:
docker rmi $(docker images | grep "none" | awk '{print $3}')
只需使用他们的ID删除图像:
# docker rmi 5e2dfc857e73 d053e988f23d ...
你可以去docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
。 有关更多选项,请参阅图像文档 。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 94870cda569b 4 seconds ago 673MB python 2.7 320a06f42b5f 10 days ago 673MB mysql latest e799c7f9ae9c 2 months ago 407MB gcavalcante8808/semaphore latest 86e863e11461 2 months ago 537MB redis latest e32ef7250bc1 2 months ago 184MB rabbitmq 3.6.9-management 7e69e14cc496 2 months ago 179MB rabbitmq 3.6.9 eb2e4968538a 2 months ago 179MB jordan/rundeck latest 6d40b57b1572 2 months ago 660MB rabbitmq 3.5.6-management dbfe8d18809a 19 months ago 304MB $ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true) Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6
尝试
docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}')
,同时可能会有更清晰的命令
更新
docker rmi $(docker images -a -q)
在使用的地方描述了以下图像。 我认为这个命令摆脱不需要的图像。