You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否按镜像/项目/全局维度限制Harbor的镜像推送制品数量?

如何限制Harbor仓库中镜像制品的推送数量

一、Harbor原生管控方案(项目/全局层面)

Harbor本身没有直接的「按数量限制推送」开关,但可以通过以下原生能力实现近似管控:

  • 项目级存储配额:进入目标项目的「设置」-「存储配额」,配置项目的最大存储容量(比如100GB)。当项目存储占用达到上限时,新的镜像推送会直接失败,强制团队清理旧制品。这种方式是按容量而非数量限制,适合整体管控项目存储规模。
  • 全局存储配额:在Harbor系统设置的「存储」模块,配置全局存储总配额,所有项目共享这个限制,超出后整个仓库无法推送新镜像。

二、镜像级精确数量限制(自定义实现)

如果需要精确到单个镜像的数量上限(比如你提到的loose/greedy保留10个制品),需要结合CI/CD流程或自定义服务实现:

  1. CI流水线前置校验
    在GitLab CI推送镜像前,先通过Harbor API查询目标镜像的现有制品数量,达到上限则终止推送:
# 配置Harbor认证信息
HARBOR_DOMAIN="your-harbor-domain"
HARBOR_USER="your-username"
HARBOR_PWD="your-password"
PROJECT_NAME="loose"
REPO_NAME="greedy"
MAX_COUNT=10

# 查询当前镜像的制品数量
ARTIFACT_COUNT=$(curl -s -u "${HARBOR_USER}:${HARBOR_PWD}" \
  "https://${HARBOR_DOMAIN}/api/v2.0/projects/${PROJECT_NAME}/repositories/${REPO_NAME}/artifacts" | jq '. | length')

# 判断是否达到上限
if [ "$ARTIFACT_COUNT" -ge "$MAX_COUNT" ]; then
  echo "Error: 镜像${PROJECT_NAME}/${REPO_NAME}的制品数量已达上限(${MAX_COUNT}个),请先清理旧制品再推送"
  exit 1
fi

# 继续执行镜像推送流程
docker push "${HARBOR_DOMAIN}/${PROJECT_NAME}/${REPO_NAME}:new-tag"
  1. Harbor Webhook+自定义校验服务
    配置Harbor的webhook,在镜像推送触发时调用自定义服务:
  • 自定义服务通过Harbor API查询目标镜像的制品数量
  • 若超出上限,直接调用Harbor API删除新推送的镜像,或通过Harbor的拦截机制拒绝推送请求

三、兼顾K8s在用镜像的优化方案

如果你担心自动清理误删K8s集群中正在使用的镜像,可以实现自定义清理脚本:

  • 先通过K8s API收集所有运行中Pod使用的镜像摘要/标签
  • 调用Harbor API查询仓库内的所有镜像,过滤掉K8s在用的制品
  • 只清理超出数量上限的未使用制品,既控制存储规模,又避免误删业务依赖镜像

内容的提问来源于stack exchange,提问作者SteveFishHuntCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:50:12