悬空镜像是什么
悬空镜像指失去全部标签引用的镜像层:名字与标签位置显示为 none,只剩一个镜像 ID 占着磁盘。最常见成因是反复用同一个标签构建新镜像——旧镜像的标签被新镜像接管,旧层就没人引用了。它不会影响运行中的容器(容器仍按 ID 引用着旧镜像),但会让磁盘持续增长,属于需要例行清理的对象。
基本信息
| 识别方式 | docker images --filter dangling=true,名字与标签均显示为 none |
|---|---|
| 与中间层区别 | 中间层需加 -a 才显示,同样可能显示为 none |
| 常见成因 | 同标签反复重建、打新标签后旧引用失效 |
| 清理命令 | docker image prune 删除悬空镜像(加 -a 会连未使用镜像一起删) |
| 保护措施 | 需要保留的版本先补稳定标签,避免变成悬空 |
| 查看占用 | docker system df 查看镜像占用总量 |
典型使用场景
- 日常巡检:定期清理构建产生的悬空层,回收磁盘
- 排查磁盘告警:确认占用主要来自镜像层还是日志与卷
- 回滚准备:把历史版本补上标记标签,避免被清理掉
- 流水线维护:在构建后自动清理悬空层,控制构建机磁盘
- 容量评估:统计悬空层数量与体积,判断是否要调整保留策略
识别与清理
识别与清理
# 列出悬空镜像
docker images --filter dangling=true
# 只看数量与占用总量
docker images --filter dangling=true -q | wc -l
docker system df
# 标准清理方式:删除全部悬空镜像
docker image prune -f
# 用命令替换逐个删除(会跳过仍被使用的层,安全性稍低,操作前先核对列表)
docker rmi $(docker images -q -f dangling=true)
# 需要保留的历史版本:先补稳定标签再清理
docker tag 3f2a1b0c9d8e app/web:1.3.9输出怎么读
| 列 | 悬空镜像表现 | 含义 |
|---|---|---|
| REPOSITORY | none | 失去仓库引用 |
| TAG | none | 失去标签引用 |
| IMAGE ID | 正常显示 | 仍可用 ID 引用与运行 |
| CREATED | 显示构建时间 | 可判断是多久前的构建残留 |
| SIZE | 占用体积 | 清理收益的直接依据 |
| 容器状态 | 运行不受影响 | 容器按 ID 引用,等同接删除 |
中间层镜像同样显示为 none,但只有加 -a 才列出。两类都可以交给 prune 统一处理,不必手工区分。
定期清理是必要的运维动作;同时建议在流水线上为每次发布保留带版本号的标签或推送归档,这样既能自由清理悬空层,也不丢回滚能力。