最有效方式是先用docker system df -v查看各类资源占用及可回收空间,再针对性清理已停止容器、悬空镜像、构建缓存等无用资源,避免误删运行服务或重要数据。

直接清理无用镜像和容器是释放 Docker 磁盘空间最有效的方式。关键不是“全删”,而是分清哪些真没用、哪些还能留,避免误删运行中服务或重要数据。
先查清楚哪些资源占了大头
执行 docker system df -v,它会按镜像、容器、卷、缓存分类显示实际占用空间,并列出各项目大小。比盲目清理更靠谱。重点关注:
- Images 下的 “Reclaimable” 列:标出可安全清理的镜像容量
- Build cache 的 Total Size:构建缓存可能比镜像还占空间
- Volumes 的 “Active” 数量:确认哪些卷还在被使用
安全删掉已停止的容器
运行中的容器不能删,但退出(exited)或已创建未启动的容器可以放心清理:
- docker container prune:交互式删除所有已停止容器,会提示确认
- docker container prune -f:跳过确认,适合脚本或批量操作
- 如果只想删特定状态的,比如只删 exited 容器:docker rm $(docker ps -aq -f status=exited)
精准清理未使用的镜像
镜像分两类:悬空镜像(
- docker image prune:只删悬空镜像,最保守,基本无风险
- docker image prune -a:删所有未被任何容器引用的镜像(含带标签的),执行前建议先 docker ps -a 确认没有依赖这些镜像的停止容器
- 删单个镜像:docker rmi 镜像ID 或 仓库名:标签,加 -f 强制删(如被缓存层引用)
顺手清理其他易被忽略的资源
镜像和容器只是冰山一角,构建缓存、日志、卷也常偷偷吃掉几十GB:
- docker builder prune:专清构建缓存(Docker 23.0+ 推荐),比 system prune 更聚焦
- docker volume prune:删未挂载的卷,注意:卷里若有你手动保存的数据,得先备份
- 容器日志不归 Docker prune 管,要单独处理:find /var/lib/docker/containers/ -name '*-json.log' -size +100M -exec ls -lh {} \; 找出大日志,再决定是否截断或轮转











