Harbor 通过项目级 Quota 实现多租户存储限制,v2.0+ 支持,需启用配额功能并为每个租户项目单独配置存储上限,统计所有镜像层原始字节总和,超限 push 失败,释放依赖垃圾回收。

通过 Docker 镜像仓库(如 Harbor)的 Quota 功能限制多租户存储空间,核心是为每个租户对应**项目(Project)** 设置独立的存储上限,实现资源隔离。它不依赖用户账号或镜像名,而是以项目为单位统计所有镜像层总大小,并在 push 时拦截超限操作。
确认 Harbor 版本与配额功能已启用
Harbor v2.0 及以上才支持项目级 Quota。旧版本(如 v1.x)无法使用该功能。
- 登录 Web UI → 左侧导航栏点击 Administration → Configuration,检查 Quota Management 是否已开启(默认开启)
- 命令行验证:运行
curl -u admin:密码 https://your-harbor/api/v2.0/systeminfo,确认返回中"quota_per_project_enabled": true
为每个租户项目配置独立配额
每个租户应分配一个专属项目(例如 tenant-a、tenant-b),配额需手动为每个项目单独设置。
- 进入 Projects → 点击目标项目名称 → 切换到 Configuration 标签页
- 勾选 Enable Quota,输入数值和单位(如
5GB、20480MB) - 保存后立即生效;若当前已超限,新
docker push将直接失败,返回 HTTP 413 或类似错误
理解配额统计逻辑与释放机制
配额不是按镜像数量或标签计算,而是统计项目下所有镜像层(layers)的**原始字节总和**,包括:
- 所有已打标签的镜像层
- 未被任何标签引用的悬空层(dangling layers)
- 历史推送但未删除的旧层(即使删了 tag,只要层还存在就计入)
删除镜像或标签后,配额不会实时释放——必须等待 Harbor 垃圾回收(GC)任务运行(默认每小时一次),或管理员手动触发:Administration → Garbage Collection → Schedule Now。
补充:通过 API 批量管理租户配额
适合 CI/CD 集成或多租户自动化开通场景:
- 查看某项目配额:
GET /api/v2.0/projects/{project_id}/quotas - 设置配额:
PUT /api/v2.0/projects/{project_id}/quotas,请求体示例:{"hard": {"memory": -1, "storage": 10737418240}}(单位为字节,此处为 10GB) - 建议配合项目创建流程,在自动建项目后立即调用 API 设置配额,避免人工遗漏











