长时间运行Docker时,系统中有很多镜像。如何一次安全删除所有未使用的 Docker 镜像以释放存储空间?
此外,我还想删除几个月前提取的图像,这些图像具有正确的 TAG
。
所以,我不是要求只删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,其中包括未标记的图像和其他图像,例如几个月前使用正确的 TAG
拉出的图像。
最佳答案
2016 年 9 月更新:Docker 1.13:PR 26108 和 commit 86de7c0 引入了一些新命令,以帮助可视化 docker 守护程序数据在磁盘上占用了多少空间,并允许轻松清理“不需要”的多余空间。
docker system prune
将删除所有悬空数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。即使是未使用的数据,也有 -a
选项。
你还有:
docker container prune
docker image prune
docker network prune
docker volume prune
对于未使用的图像,请使用
docker image prune -a
(用于删除悬空和未使用的图像)。警告:“未使用”的意思是“任何容器都没有引用的图像”:在使用
-a
之前要小心。如 A L 的 answer 所示,
docker system prune --all
将删除所有未使用的图像,而不仅仅是悬空的图像......这可能有点太多了。将
docker xxx prune
与 --filter
option 结合可以是限制修剪的好方法( docker SDK API 1.28 minimum, so docker 17.04+ )until (<timestamp>)
- 仅删除在给定时间戳 label
(label=<key>
,label=<key>=<value>
,label!=<key>
,或label!=<key>=<value>
) - 只取出容器,图像,网络,和卷带(或不加,万一label!=...
使用)指定的标签。 以“Prune images”为例。
原始答案(2016 年 9 月)
我通常这样做:
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
我有一个 alias for removing those [dangling images] 13 :
drmi
这样,任何不再被标记图像引用的中间图像都将被删除。
我对 exited processes (containers) 做同样的 第一个
alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'
由于 haridsv 指出 in the comments :
Jess Frazelle (jfrazelle) 有 bashrc function :
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 - 如何删除旧的和未使用的 Docker 镜像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32723111/