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 rm $(docker ps -a -q)

然后我们可以删除所有图像:

docker image prune

其他回答

你可以试着只列出没有标签的图片(没有标签的图片,或者有标签没有标签的图片):

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镜像”中提到的,你也可以执行image prune命令:

docker image prune

tansadio建议:

docker images -a | grep none | awk '{ print $3; }' | xargs docker rmi --force

但是,正如BryanK所指出的:确保您的存储库名称(或其中一个标记名称)不具有字符'none'序列,否则它们将匹配正则表达式并被删除。


话虽如此,Janaka Bandara在评论中提到:

这没有删除<none>标记的图像为我(例如foo/bar:<none>);我不得不使用docker图像-摘要和docker rmi foo/bar@<文摘>

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

诊断步骤 如果你使用——digest =true选项(未标记的条目具有Docker Content Trust签名摘要),你可以看到这两个条目的区别:

# 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图像变得很困难(您必须强制执行,否则首先删除正确标记的条目,或者通过摘要删除。

你可以去docker rmi $(docker images -f " hanging =true" -q)。有关更多选项,请参阅图像文档。

$ 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系统修剪将做的把戏,它删除

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

但是要小心使用它!

您可以检查过滤器是否“悬空”不再工作

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

使用docker系统修剪删除悬空图像

$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N]

你可以用——force表示不提示确认

$ docker system prune --force

Docker容器修剪首先删除所有停止的容器,然后Docker图像修剪删除所有悬空图像。

docker container prune
docker image prune