image prune 是什么
docker image prune 清理没有被任何容器使用的镜像:默认只删悬空镜像,也就是没有标签的中间层;加 -a 会连有标签但当前没有容器引用的镜像一起删除。执行前可以用时间与标签过滤把范围收紧。
基本信息
| 用途 | 批量清理镜像,释放磁盘空间 |
|---|---|
| 语法 | docker image prune [-a] [--filter until=168h] [--filter label!=keep] [-f] |
| 默认行为 | 只删悬空镜像,影响面小 |
| -a 的影响 | 连有标签但无容器使用的镜像一起删 |
| 前置确认 | 先看 docker images 与 docker ps -a 的引用关系 |
典型使用场景
- 构建机日常清理:每次构建都会产生悬空镜像,长期不清理会吃掉大量磁盘
- 磁盘告警时在确认镜像可重建的前提下释放空间
- 保留回滚基线:用 keep 之类的标签保护旧版本,再批量清理其余镜像
- 按时间清理,只删超龄且未被使用的镜像,减小影响面
- 控制 CI 构建机的磁盘增长,把清理写进流水线收尾步骤
- 清理前先看 docker system df,判断空间主要被镜像、卷还是构建缓存占用
示例
示例
docker images # 先看清有哪些镜像与标签
docker image prune # 只删悬空镜像,影响最小
docker image prune -a --filter 'until=168h' # 删除七天前且未被使用的镜像
docker image prune -a -f --filter 'label!=keep' # 保留带 keep 标签的镜像再清理
docker system df # 看空间到底被什么占用清理命令的范围差别
| 命令 | 删除范围 | 风险 |
|---|---|---|
| image prune | 悬空镜像 | 影响小,可例行执行 |
| image prune -a | 所有未被容器使用的镜像 | 有标签的版本一并删除,回滚基线可能丢失 |
| image prune --filter until | 超龄的悬空镜像 | 最温和的例行方式 |
| volume prune | 未被使用的卷 | 数据直接删除 |
| system prune -a | 容器、网络与未使用镜像 | 影响面最大,生产机上慎用 |
-a 会删掉有标签但当前没有容器使用的镜像,多项目共享的构建机上先确认哪些镜像还在回滚窗口内再执行。
时间过滤针对的是“多久没有被使用”,不是“多久前创建”;被容器引用过的镜像时间会刷新,不要把它当版本保护手段。
磁盘占用不只来自镜像:docker system df 里的构建缓存一栏经常比镜像还大,清理镜像之前先看看缓存占了多少。