Harbor垃圾回收是否删除所有无标签镜像?如何清理已删仓库释放空间?
Harbor垃圾回收(GC)行为说明及需求实现方案
核心问题答案
默认情况下,Harbor的垃圾回收(GC)会执行两类清理操作:
- 清理所有已删除仓库关联的镜像数据(包括有标签和无标签的)
- 清理所有无标签(悬空)镜像——无论这些镜像属于正常存在的仓库还是已删除的仓库
也就是说,默认GC会把所有无标签镜像都删掉,不符合你「保留其他仓库无标签镜像」的需求。
满足需求的手动处理方案
要实现「仅清理已删除仓库的镜像,保留正常仓库无标签镜像」的目标,需要放弃默认GC,按以下步骤操作:
- 定位已删除仓库的存储目录:Harbor的镜像存储默认路径为
/data/registry/docker/registry/v2/repositories/,已删除的仓库目录会保留但在Harbor UI中不可见,可通过对比UI中存在的仓库列表来筛选需要删除的目录。 - 停止Harbor服务:
docker-compose down - 手动删除已删除仓库的存储目录:直接删除对应仓库的目录(注意不要误删正常仓库的目录)。
- 执行带参数的Registry GC:使用Registry官方镜像执行GC,添加
--delete-untagged=false参数跳过无标签镜像的清理:docker run --rm -v /data/registry:/var/lib/registry registry:2 garbage-collect --delete-untagged=false /etc/docker/registry/config.yml - 重启Harbor服务:
docker-compose up -d
注意事项
- 操作前务必备份Harbor的存储数据,避免不可逆的误删。
- 若为集群部署的Harbor,需确保所有节点的存储目录同步处理。
内容的提问来源于stack exchange,提问作者smgtkn
相关产品推荐
相关产品推荐

