docker system prune 默认清理已停止容器、悬空镜像、未用自定义网络和构建缓存,不删运行中容器、有标签镜像、数据卷及默认网络;加 -a 删除所有未被引用镜像,加 --volumes 清理闲置卷,加 -f 跳过确认,可配合 --filter 精准筛选。

docker system prune 是清理 Docker 无用资源最直接的命令,它能一次性回收停止容器、悬空镜像、未用网络和构建缓存占用的空间。关键在于理解默认行为和参数组合,避免误删。
默认清理哪些内容?
执行 docker system prune(不加任何参数)会删除:
- 所有已停止状态的容器(exited、created 等)
- 所有悬空镜像(dangling images),即
<none>:<none></none></none>且未被任何容器引用的中间层 - 所有未被容器使用的自定义网络(不包括默认 bridge/host/none)
- 全部构建缓存(build cache)
⚠️ 它不会删除:正在运行的容器、有标签的镜像(哪怕没在用)、数据卷、系统默认网络。
加 -a 删除所有未被引用的镜像
很多空间其实被带标签但闲置的镜像占着,比如你拉过 nginx:1.25 后又换了 nginx:1.26,旧版本还在。这时用:
docker system prune -a
它会在默认清理基础上,额外删除所有未被任何容器(包括已停止或已创建未启动的)引用的镜像——无论有没有标签、是否在本地构建过。
建议先运行 docker ps -a 和 docker images 对照检查,确认哪些镜像是可舍弃的。
加 --volumes 清理闲置数据卷
数据卷(volumes)默认完全不参与清理,即使关联容器已被删除,卷仍保留。若确定不再需要这些数据,可加上:
docker system prune -a --volumes
这会一并删除所有未被任何容器挂载的卷。注意:卷内数据不可恢复,操作前务必确认备份或无需保留。
如只想清理卷,也可单独用:docker volume prune,更可控。
加 -f 跳过确认,配合过滤更精准
每次运行默认都会提示 Continue with this operation? [y/N]。加 -f 可跳过确认,适合脚本或重复操作:
docker system prune -a --volumes -f
还可配合 --filter 按时间或标签筛选,例如:
-
docker system prune --filter "until=48h":只删 48 小时前创建的无用资源 -
docker system prune -a --filter "label=env=dev":只处理打了env=dev标签的未用镜像/网络
多个 filter 可叠加,提升安全性与针对性。











