长期运行 Docker 时,系统中有很多镜像。如何一次安全地删除所有未使用的 Docker 映像以释放存储空间?
此外,我还想删除几个月前提取的图像,这些图像具有正确的TAG.
TAG
所以,我不是要求只删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,其中包括未标记的图像和其他图像,例如几个月前用正确的TAG.
2016 年 9 月更新:Docker 1.13:PR 26108和提交 86de7c0引入了一些新命令,以帮助可视化 docker 守护程序数据在磁盘上占用的空间,并允许轻松清理“不需要”的多余空间。
docker system prune 将删除所有悬空数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。即使是未使用的数据,也可以-a选择。
docker system prune
-a
你还有:
docker container prune
docker image prune
docker network prune
docker volume prune
对于 未使用 的图像,请使用docker image prune -a(用于删除悬空 和 未使用的图像)。 警告:“ 未使用 ”表示“任何容器未引用的图像”:使用前要小心-a。
docker image prune -a
如AL的回答所示,dockersystem prune --all将删除所有 未使用 的图像,而不仅仅是悬挂的图像......这可能有点太多了。
dockersystem prune --all
结合docker xxx prune该--filter选项可能是限制修剪的好方法(至少 docker SDK API 1.28,所以 docker 17.04+)
docker xxx prune
--filter
当前支持的过滤器有:
until (<timestamp>)
label
label=<key>
label=<key>=<value>
label!=<key>
label!=<key>=<value>
label!=...
有关示例,请参见“修剪图像”。
我通常这样做:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
我有一个[删除那些悬空图像的别名:drmi] 13
drmi
过滤器找到未使用的dangling=true图像
dangling=true
这样,任何不再被标记图像引用的中间图像都会被删除。
我 首先 对退出的进程(容器)做同样的事情
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
从技术上讲, 你应该在清理镜像之前先清理容器,因为这会捕获更多的悬空镜像和更少的错误 。
Jess Frazelle (jfrazelle)具有bashrc 功能:
dcleanup(){ docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null }
要删除旧图像,而不仅仅是“未引用的悬空”图像,您可以考虑 docker- gc :
docker- gc
一个简单的 Docker 容器和镜像垃圾回收脚本。 一个多小时前退出的容器将被移除。 之后不属于任何剩余容器的图像将被删除。
一个简单的 Docker 容器和镜像垃圾回收脚本。