如何一次性删除本地所有 Docker 镜像?
先删全部容器 docker rm -vf $(docker ps -aq),再删全部镜像 docker rmi -f $(docker images -aq);或一条 docker system prune -a 清掉未使用资源。本文给出各平台命令与安全提醒。
做法:先删除所有容器(运行中的镜像无法删除),再删除所有镜像——docker rm -vf $(docker ps -aq) 然后 docker rmi -f $(docker images -aq)。更省事的做法是 docker system prune -a,一键清理所有停止的容器、未使用的镜像、网络与构建缓存。
分步清理(精确控制)
1. 删除全部容器
docker rm -vf $(docker ps -aq)
-v 顺带删除匿名卷,-f 强制删运行中的容器。
2. 删除全部镜像
docker rmi -f $(docker images -aq)
顺序不能反:有容器(哪怕已停止)引用的镜像删不掉。
一键清理(推荐)
docker system prune -a --volumes
-a:删除所有未被容器使用的镜像(不只是悬空层)--volumes:连未使用的卷一起删(数据卷里的数据会丢,慎用)
想保守一点就去掉 --volumes,只清容器、镜像、网络、构建缓存。
Windows PowerShell 写法
PowerShell 不支持 $(...) 子命令,用管道:
docker ps -aq | % { docker rm -vf $_ }
docker images -aq | % { docker rmi -f $_ }
安全提醒
- 这些命令不可恢复,执行前确认没有还在用的容器和数据卷。
- 想保留某些镜像,先用
docker images列出,把要留的排除掉:docker rmi $(docker images -q | grep -v 要保留的ID)。 - CI 构建机上建议定期
docker system prune -f做日常回收,避免磁盘撑爆。
观测云对照
磁盘水位要有告警兜底。 Docker 磁盘膨胀是宿主机常见故障。DataKit 采集主机磁盘指标后用监控器设阈值告警,在 prune 失效、磁盘写满之前就收到通知。
常见问题(FAQ)
Q:报错 image is being used by stopped container?
A:还有停止的容器引用该镜像,先 docker rm $(docker ps -aq) 清容器。
Q:dangling(
A:重新构建后失去标签的旧镜像层,用 docker image prune 专门清理。
Q:构建缓存怎么单独清?
A:docker builder prune -a,不影响在用的镜像。