docker system prune 是什么
docker system prune 一次性清理未使用的资源:停止的容器、悬空镜像、未被使用的网络与构建缓存。加 -a 会把范围扩大到所有未被容器引用的镜像,加 --volumes 连未使用的数据卷一起清。它是回收磁盘最快的手段,也是误删数据最常见的来源,所以执行前先看 df,执行后确认业务正常。
基本信息
| 默认清理 | 停止的容器 + 悬空镜像 + 未使用网络 + 构建缓存 |
|---|---|
| -a | 额外清理所有未被容器引用的镜像,含缓存的基础镜像 |
| --volumes | 清理未使用的数据卷,可能包含业务数据 |
| -f | 跳过确认提示,脚本中使用 |
| 危险等级 | --volumes 近似于一次数据删除操作 |
典型使用场景
- 磁盘告警应急:先确认可回收量,再按保守级别逐步清理
- CI 机器维护:定时清理构建缓存与悬空镜像,控制磁盘增长
- 环境重建:清理历史容器与网络,让环境回到干净状态
- 发布前腾空间:镜像拉取前清出可用空间,避免拉取失败
- 定期治理:把轻度 prune 做成周任务,避免磁盘被动告警
分级清理
分级清理
docker system df # 先看各类资源可回收多少
docker system prune # 保守:容器/悬空镜像/网络/缓存
docker builder prune # 只清构建缓存,风险最低
docker image prune -a # 清理所有未被引用的镜像
docker system prune -a --volumes # 激进:先确认无数据依赖再执行清理范围对照
| 命令 | 容器 | 镜像 | 卷 | 构建缓存 |
|---|---|---|---|---|
| system prune | 已停止 | 悬空 | 不动 | 清理 |
| system prune -a | 已停止 | 全部未引用 | 不动 | 清理 |
| system prune --volumes | 已停止 | 悬空 | 未使用 | 清理 |
| image prune | 不动 | 悬空 | 不动 | 不动 |
| builder prune | 不动 | 不动 | 不动 | 清理 |
有匿名卷承载数据库数据(用无名 -v 挂载)的环境禁止随意加 --volumes:先 docker volume ls 逐个确认用途,再决定是否清理。
清理只针对未使用资源,运行中的容器与使用中的镜像不受影响;但在生产机上清理构建缓存会让下一次构建全量重建,耗时明显变长。