root@server:~# docker images -a REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE 5e2dfc857e73 5 days ago 261.6 MB d053e988f23d 5 days ago 261.6 MB 1d5d4a2d89eb 5 days ago 261.6 MB ea0d189fdb19 5 days ago 100.5 MB 26c6175962b3 5 days ago 100.5 MB 73d5cec4a0b3 5 days ago 100.5 MB 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 1.13+”中提到的“ 如何删除旧的和未使用的Docker映像 ”中所述,您还可以执行以下image prune命令:
image prune
docker image prune
话虽如此,Janaka Bandara在评论中提到:
这并 没有<none>为我删除带有标签的图像(例如foo/bar:<none>);我不得不使用docker images --digests和docker rmi foo/bar@<digest>
<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 Content Trust签名摘要):
如果使用该 --digests=true 选项,则可以看到这两个条目的区别(未标记的条目具有Docker Content Trust签名摘要):
--digests=true
# 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
请注意,Paul还提到了Moby问题18892:
拉取签名的图像后,<none>“ docker images”输出中会有一个“额外”条目(带有标记)。 这使rmi图像难以处理(您必须强行使用图像,否则首先删除标记正确的条目,或通过摘要删除)。
docker images
rmi