如何一次性删除本地所有 Docker 镜像?

确认可停用后先删除容器,再检查引用并删除镜像;日常用 docker system prune -a 回收停止容器及未使用资源,它不等于全量清空。本文给出各平台命令与安全提醒。

最佳实践
如何一次性删除本地所有 Docker 镜像?封面

清空容器和镜像会停止并删除现有工作负载;可先移除容器,再删除镜像。日常回收用 docker system prune -a,它清理停止容器及未使用资源,不等于清空所有镜像和容器。

分步清理(精确控制)

1. 删除全部容器

ids=$(docker ps -aq)
[ -z "$ids" ] || printf '%s\n' "$ids" | xargs docker rm -f

示例不删除卷;另加 -v 会删除关联匿名卷,不会自动删除命名卷。-f 会强制终止并删除运行中的容器。

2. 删除全部镜像

ids=$(docker images -aq | sort -u)
[ -z "$ids" ] || printf '%s\n' "$ids" | xargs docker rmi

同一镜像有多个标签时,按 ID 删除可能被拒绝,应检查并逐一移除不再需要的标签。先检查引用关系再删镜像;-f 在某些引用冲突下允许强制操作,不能简单说所有已停止容器引用都永远无法删除。

一键清理(推荐)

docker system prune -a
  • -a:删除所有未被容器使用的镜像(不只是悬空层)
  • 可另加 --volumes:当前默认语义会清理未使用匿名卷,不等于所有命名卷;会删除数据,需核对所用版本

想保守一点就去掉 --volumes,只清容器、镜像、网络、构建缓存。

Windows PowerShell 写法

PowerShell 支持 $() 子表达式,但语法语义不同;可用管道逐项执行,空列表不会调用删除:

docker ps -aq | % { docker rm -f $_ }
docker images -aq | % { docker rmi $_ }

安全提醒

  1. 这些命令不可恢复,执行前确认没有还在用的容器和数据卷。
  2. 想保留某些镜像,先用 docker images 列出,把要留的排除掉:docker rmi $(docker images -q | grep -v 要保留的ID)。
  3. CI 构建机上建议定期 docker system prune -f 做日常回收,避免磁盘撑爆。

清理完成后,再检查 Docker 数据目录所在文件系统的剩余空间。若已使用观测云,可按磁盘采集器记录的挂载点和使用率设置阈值;它反映文件系统水位,具体应清理哪类数据仍要核对前面的 Docker 用量结果。

常见问题(FAQ)

Q:报错 image is being used by stopped container?
A:还有停止的容器引用该镜像,先确认对应停止容器可以删除,再用 docker rm 容器ID 移除该引用。

Q:dangling()镜像是什么?
A:没有标签且未被其他镜像引用的镜像,常见于重新构建后,用 docker image prune 专门清理。

Q:构建缓存怎么单独清?
A:docker builder prune -a,不影响在用的镜像。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台