镜像同步过滤器用于跨仓库同步时按规则筛选目标镜像,实现按需同步。Harbor支持项目、镜像名、标签和资源类型多维过滤,原生Docker Registry需借助skopeo等工具脚本实现。

理解镜像同步过滤器的作用
镜像同步过滤器(Filter)是 Docker Registry 或 Harbor 等镜像仓库在做跨仓库镜像同步时,用于控制哪些镜像、标签或命名空间被拉取的关键机制。它不改变源仓库内容,而是在同步任务发起时,按规则筛选目标镜像,实现“按需同步”,避免全量拉取浪费带宽和存储。
Harbor 中配置同步过滤器(推荐方式)
目前主流生产环境使用 Harbor 实现企业级镜像同步,其原生支持基于项目(Project)、镜像名(Repository)、标签(Tag)和 Artifact 类型的多维度过滤。操作路径如下:
- 进入 Harbor 控制台 → Administer → Registries,添加目标源仓库(如 Docker Hub、阿里云ACR、自建Registry)
- 创建同步策略(Administer → Replication → New Replication Rule)
- 在 Filters 区域设置同步条件:
-
Project/Repository:填
library/nginx或myapp/*(支持通配符*和**) -
Tag:填
v1.*、latest、!dev-*(Harbor v2.8+ 支持排除语法) -
Resource Type:可限定只同步
image,跳过chart或signature
-
Project/Repository:填
- 启用 Trigger Mode 为 Manual、Event-based(如源端推送即同步)或 Scheduled(如每天凌晨同步匹配的镜像)
使用 registry-mirror + manifest list 过滤(轻量级方案)
若使用原生 Docker Registry(非 Harbor),本身不提供图形化过滤器,但可通过组合工具实现按需同步:
- 用
skopeo脚本扫描源仓库的 catalog,提取满足条件的镜像+标签(例如只取alpine的3.18和latest) - 生成 manifest list 或 tag 映射表,再调用
skopeo copy --all或逐个同步 - 示例命令片段:
skopeo list-tags docker://docker.io/library/alpine | jq -r '.Tags[] | select(test("^3\.18$|^latest$"))' | xargs -I{} skopeo copy docker://docker.io/library/alpine:{} docker://my-registry/library/alpine:{}
关键注意事项
- 过滤器在同步 发起时 生效,不会自动清理已同步但不再匹配的旧镜像,需配合定期 GC 或手动删除
- Harbor 的 tag 过滤支持正则(需开启
regex模式),但部分老版本仅支持 glob;确认所用 Harbor 版本是否支持!排除语法 - 私有 Registry 若启用了认证,同步任务中必须正确配置用户名/密码或 token,并确保权限覆盖目标 repository 范围
- 跨 registry 同步时,注意镜像 digest 是否保留(
skopeo copy --all可保持 digest 不变,Harbor 默认也保留)


















