如何一次性删除本地所有 Docker 镜像?
确认可停用后先删除容器,再检查引用并删除镜像;日常用 docker system prune -a 回收停止容器及未使用资源,它不等于全量清空。本文给出各平台命令与安全提醒。
清空容器和镜像会停止并删除现有工作负载;可先移除容器,再删除镜像。日常回收用 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 $_ }
安全提醒
- 这些命令不可恢复,执行前确认没有还在用的容器和数据卷。
- 想保留某些镜像,先用
docker images列出,把要留的排除掉:docker rmi $(docker images -q | grep -v 要保留的ID)。 - 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,不影响在用的镜像。