首页/开发/CI/CD 与发布速查/镜像仓库垃圾回收
构建与制品管理58 条

镜像仓库垃圾回收

删除 manifest/标签后,底层 blob 仍占用存储:需要执行仓库自己的垃圾回收流程(必要时停写或只读模式)。

CI/CD 与发布速查开发更新于 2026-10-13

仓库 GC 是什么

镜像仓库删除 manifest 或标签后,底层 blob 不会自动消失:blob 按内容寻址、可能被多个 manifest 共享,必须执行仓库自己的垃圾回收流程来释放无引用空间。判断是否需要 GC 的最直接信号是「删了镜像但存储不降」。自建 registry 手动执行,Harbor 有 GC 任务,云托管仓库多数已自动化。

基本信息

原理先解除引用,再回收无引用 blob
工具自建 registry 的 garbage-collect 命令;Harbor 的 GC 任务
窗口安排在低峰并避免与推送并发
频率定期执行(如月度),不要等磁盘告警才想起
验证对比执行前后存储占用与删除计数

典型使用场景

  • 存储告警后的空间释放
  • 例行维护:把 GC 纳入月度运维计划
  • 保留策略收紧后回收历史遗留 blob
  • Harbor 项目配额管理:GC 配合保留策略控制配额
  • 迁移或备份前瘦身,降低传输量
  • 接手旧仓库:先跑一次 GC 摸清真实占用再做容量规划

registry 官方工具

registry 官方工具
# registry 需以只读或停写状态运行
bin/registry garbage-collect /etc/docker/registry/config.yml
# 看输出中释放的 blob 数量与预期是否一致
du -sh /var/lib/registry   # 执行前后对比实际占用

按仓库类型选 GC 方式

类型方式注意
Docker registry命令行 garbage-collect需停写或只读模式
Harbor面板 GC 任务看任务日志与配额变化
云托管仓库平台自动化特殊保留规则仍要人工核对
先做一次「删 tag 后存储未下降」的验证,确认 GC 流程真的在跑,不然清理只会停留在标签层面。
删标签与 GC 是两步:保留策略负责删引用,GC 负责回收空间,两步都配置好才真正省存储;缺了 GC 这一环,删除操作等于没做。
GC 期间别跑镜像扫描等重 IO 任务:资源竞争会拉长窗口,安排在维护时段,并把执行记录写进维护日志。

易错点

  • 只删标签不收垃圾:账单继续涨,删完按计划跑 GC,把两步写进同一张维护清单
  • 与推送并发执行 GC:可能出现引用竞争,安排在停写窗口
  • 认为云仓库完全不用管:托管只是自动化回收,特殊保留与清理规则仍需核对
  • 从不验证 GC 效果:以为在跑实际没生效,用执行前后存储对比验证
  • 把 GC 当日常清理天天跑:频繁停写影响拉取推送,按存储增长节奏安排频率并避开发布高峰

数据来源与参考

  • Docker Distribution 文档《Garbage collection》
  • Harbor 文档《Garbage Collection》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌