在docker documentation of docker image prune中,可以使用-a标志来
删除所有未使用的图像,而不仅仅是悬挂的图像
和后来
删除所有悬空图像。如果指定了-a,也将删除所有未被任何容器引用的图像。
谁能给我解释一下什么是悬空图像,悬空图像和未使用的图像有什么区别?
在docker documentation of docker image prune中,可以使用-a标志来
删除所有未使用的图像,而不仅仅是悬挂的图像
和后来
删除所有悬空图像。如果指定了-a,也将删除所有未被任何容器引用的图像。
谁能给我解释一下什么是悬空图像,悬空图像和未使用的图像有什么区别?
7条答案
按热度按时间vsmadaxz1#
未使用的镜像意味着它尚未在容器中分配或使用。例如,当运行
docker ps -a
时,它将列出所有已退出和当前运行的容器。在任何容器内使用的任何图像都是“使用过的图像”。另一方面,一个dangling映像只是意味着您已经创建了映像的新版本,但没有给它一个新名称。因此,你拥有的旧图像变成了“悬挂图像”。那些旧的图像是未标记的图像,当您运行
docker images
时,其名称上显示“<none>
“。当运行
docker system prune -a
时,它将删除所有停止的容器、镜像和没有关联容器的网络,并构建缓存。小心点!k5hmc34c2#
最安全、最快捷的清理挂起镜像的方法
Docker镜像由多个层组成。悬挂图像是与任何标记图像都没有关系的层。它们不再起作用,并消耗磁盘空间。
注意:我建议不要在生产环境中使用
prune
,因为docker system prune -a
会删除所有容器没有引用的镜像,这样我们就不能回滚到以前的版本。要列出悬挂图像,请将值为
dangling=true
的筛选器标志-f
添加到docker images
。列出挂起镜像
移除挂起镜像
或
当我们运行任何cron作业来删除那些悬挂的东西时,使用上面的方法来确保作业成功运行。就像在Jenkins中一样,如果我们用下面的命令运行一个自由风格的作业,即使机器中没有悬挂的东西,作业也永远不会失败。
这是最安全和最简单的方法来清理悬挂图像,并取回我们的磁盘空间回来使用。
pkbketx93#
Docker中的镜像由sha256摘要引用,通常称为镜像ID。该摘要是您在docker主机上存在镜像所需的全部内容。通常情况下,您会有标签指向这些标签,例如。标签'busybox:latest'当前指向图像id c30178c523.在我的系统上。
多个标签可以指向同一个图像,并且可以更改任何标签以指向不同的id,例如。当你拉一个新的busybox:latest副本或构建一个新版本的应用程序映像时。
悬挂图像是没有标签的图像,并且没有子图像(例如,使用不同版本的
FROM busybox:latest
的旧图像),指向它们。他们以前可能有一个标签指向他们,后来这个标签改变了。或者他们从来没有一个标签(例如,docker build
的输出,不包括标记选项)。只要没有引用旧映像ID的容器仍在运行,这些映像通常可以安全地删除。保留它们的主要原因是为了构建缓存。
此外,您可能已经下载了容器(包括已停止的容器)当前未使用的映像。这些与悬挂图像完全不同,只要你不打算在将来使用它们,或者不介意在需要它们时下载另一个副本,删除它们可能是安全的。
von4xj4u4#
悬挂图像是与任何标记图像都没有关系的图层。它们不再起作用,并消耗磁盘空间。
未使用镜像是指尚未在容器中分配或使用的镜像。
列出悬空图片:
mlnl4t2r5#
悬挂图像是未标记的图像。下面的命令给出了一个悬挂图像的列表。
docker image prune
删除所有悬挂图像。未使用的镜像是指有标签但当前未作为容器使用的镜像。将来你可能需要它,也可能不需要。
docker image prune -a
删除所有未使用的图像。你通常不想删除所有未使用的图像,直到一段时间。因此,最好用过滤器去除。
docker image prune -a -f --filter "until=6h"
tvokkenx6#
在图片截图中,“无”名称是悬空图像。一个悬空的映像只是意味着您已经创建了映像的新版本,但没有给它一个新名称。因此,你拥有的旧图像变成了“悬挂图像”。这些旧镜像是未标记的镜像,当你运行docker镜像时,它们的名称上会显示“”。
docker system prune -a
,它将删除未使用的和悬挂的图像。因此,容器中使用的任何映像,无论它们是否已退出或正在运行,都不会受到影响。fnx2tebb7#
我看到了一些有用的命令(别名)来删除悬挂的图像,感谢andyneff在这里:https://forums.docker.com/t/how-to-delete-cache/5753:
第一个清除所有悬挂图像。这对于移除多个构建中遗留的中间映像非常有用。第二个是用于移除停止的容器。这些是我日常维护时用的化名
如果你想删除所有缓存,你首先必须确保所有容器都被停止和删除,因为你不能删除容器正在使用的镜像。所以类似的东西
这将杀死并删除缓存中的所有图像。