长期运行 Docker 时,系统中有很多镜像。如何一次安全地删除所有未使用的 Docker 映像以释放存储空间?
此外,我还想删除几个月前提取的图像,这些图像具有正确的 TAG
。
所以,我不是要求只删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,其中包括未标记的图像和其他图像,例如几个月前用正确的 TAG
提取的图像。
原文由 Quanlong 发布,翻译遵循 CC BY-SA 4.0 许可协议
长期运行 Docker 时,系统中有很多镜像。如何一次安全地删除所有未使用的 Docker 映像以释放存储空间?
此外,我还想删除几个月前提取的图像,这些图像具有正确的 TAG
。
所以,我不是要求只删除未标记的图像。我正在寻找一种方法来删除一般未使用的图像,其中包括未标记的图像和其他图像,例如几个月前用正确的 TAG
提取的图像。
原文由 Quanlong 发布,翻译遵循 CC BY-SA 4.0 许可协议
(再次)参考 VonC,使用更新的 system prune
。不耐烦的人可以使用 -f, --force
选项跳过提示:
docker system prune -f
不耐烦和 鲁莽 的人还可以使用 -a, --all
选项删除“未使用的图像,而不仅仅是悬空的图像”:
docker system prune -af
https://docs.docker.com/engine/reference/commandline/system_prune/
请参阅使用最近添加的 prune
命令的 VonC 的答案。这是相应的shell别名方便:
alias docker-clean=' \
docker container prune -f ; \
docker image prune -f ; \
docker network prune -f ; \
docker volume prune -f '
删除已停止(退出)的容器:
$ docker ps --no-trunc -aqf "status=exited" | xargs docker rm
删除未使用的(悬空)图像:
$ docker images --no-trunc -aqf "dangling=true" | xargs docker rmi
如果您对 不可撤销的数据丢失 _非常谨慎_,那么您可以删除未使用的(悬空)卷(v1.9 及更高版本):
$ docker volume ls -qf "dangling=true" | xargs docker volume rm
在这里,它们位于一个方便的 shell 别名中:
alias docker-clean=' \
docker ps --no-trunc -aqf "status=exited" | xargs docker rm ; \
docker images --no-trunc -aqf "dangling=true" | xargs docker rmi ; \
docker volume ls -qf "dangling=true" | xargs docker volume rm'
docker ps -f
docker rm
docker images -f
docker rmi
docker volume ls
docker volume rm
原文由 rubicks 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.4k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读
2 回答1.2k 阅读
1 回答956 阅读
(原答案见下文)
2016 年 9 月更新:Docker 1.13: PR 26108 和 提交 86de7c0 引入了一些新命令,以帮助可视化 docker 守护程序数据在磁盘上占用的空间,并允许轻松清理“不需要”的多余空间。
docker system prune
将删除所有悬空数据(即按顺序:容器停止,没有容器的卷和没有容器的图像)。即使是未使用的数据,使用-a
选项。你还有:
docker container prune
docker image prune
docker network prune
docker volume prune
对于 未使用 的图像,请使用
docker image prune -a
(用于删除悬空 和 未使用的图像)。警告:“ _未使用_”表示“任何容器未引用的图像”:在使用
-a
之前要小心。如 AL 的 回答 所示,
docker system prune --all
将删除所有 未使用 的图像,而不仅仅是悬挂的图像……这可能有点太多了。结合
docker xxx prune
与--filter
选项 可能是限制修剪的好方法( docker SDK API 1.28 最低,所以 docker 17.04+ )until (<timestamp>)
- 仅删除在给定时间戳之前创建的容器、图像和网络label
(label=<key>
,label=<key>=<value>
,label!=<key>
, orlabel!=<key>=<value>
) - only remove containers, images, networks,和带有(或 _不带_,如果使用label!=...
)指定标签的卷。有关示例,请参见“ 修剪图像”。
原始答案(2016 年 9 月)
我通常这样做:
我有一个[删除那些 悬空图像 的别名:
drmi
] 13这样,任何不再被标记图像引用的中间图像都会被删除。
我 首先 对 退出的进程(容器) 做同样的事情
正如 haridsv 在评论中 指出的那样:
Jess Frazelle (jfrazelle) 具有 bashrc 功能:
要删除旧图像,而不仅仅是“未引用的悬空”图像,您可以考虑
docker-gc
: