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 --digestsdocker 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) 

在使用的地方描述了以下图像。 我认为这个命令摆脱不需要的图像。