Docker Registry 本身不支持多节点自动同步,需借助外部机制实现:①用 Registry Mirror 实现读侧按需缓存;②用 Harbor 复制规则实现写侧事件驱动同步;③用 Skopeo 脚本实现轻量定制化同步。

Docker Registry 本身不支持多节点自动同步,它只是一个基础镜像存储服务,没有内置的复制、事件监听或集群协调能力。真正实现多节点镜像自动同步,必须借助外部机制——核心思路是:用一个具备同步能力的代理层或管理平台来协调多个 Registry 实例,而不是靠 Registry 自身配置。
下面分三类典型方案说明,按适用场景由简到强排列:
用 Registry Mirror(缓存代理)实现读侧自动同步
适合“只读分发”场景,比如多地开发团队拉取公共镜像或少量私有镜像。
- 在每个边缘节点部署一个 Docker Registry,并启用
mirror模式 - 配置
config_mirror.yml指向中心 Registry(如https://harbor-main.internal) - 关键参数示例:
mirroring: source: https://harbor-main.internal source_index: https://harbor-main.internal tags_cache_ttl: 86400 # 缓存1天,避免频繁查源
- 客户端只需把
--registry-mirror或/etc/docker/daemon.json中的registry-mirrors指向本地镜像代理地址 - 注意:这是按需拉取式同步,只有首次
docker pull时才触发从源拉取并缓存,不主动推送变更
用 Harbor 复制规则实现写侧主动同步
适合企业级多中心架构,要求镜像一上传就同步到其他节点。
- 所有 Registry 节点统一替换为 Harbor(基于 Docker Compose 或 Helm 部署)
- 在源 Harbor 控制台 → 项目 → 复制规则 → 新建规则:
- 目标注册中心:填另一中心 Harbor 的 URL、管理员账号和密码(建议用 robot account)
- 源资源过滤:可限定项目名、镜像名(支持正则,如
^prod/.*$)、标签(如^v[0-9]+\..*) - 触发模式选
Event-based:镜像 push/delete 立即触发同步 - 开启
Enable Digest Verification和Use HTTPS保证完整性与加密传输
- 同步过程由 Harbor 的 Job Service 异步执行,失败会重试并记录日志
用 Skopeo + 脚本 + 定时/事件驱动实现轻量可控同步
适合无 Harbor 环境、或需定制逻辑(如仅同步特定 digest、跳过测试标签)。
- 在中控机或某 Registry 节点安装 Skopeo(支持主流 Linux 发行版)
- 编写同步脚本,关键逻辑包括:
- 调用源 Registry 的
/v2/_catalog和/v2/<repo>/tags/list获取全量镜像列表 - 对每个
<repo>:<tag>计算 manifest digest(用skopeo inspect) - 比较目标 Registry 是否已有相同 digest,仅当不一致时执行
skopeo copy - 示例命令:
skopeo copy \ --src-creds user:pass \ --dest-creds admin:token \ docker://reg-a/proj/app:v1.0.0 \ docker://reg-b/proj/app:v1.0.0
- 调用源 Registry 的
- 通过 systemd timer 或 CI 流水线触发脚本,例如每10分钟轮询一次
- 可加
-–all参数同步 multi-arch 镜像,加--retry-times 3提高可靠性
不依赖复杂平台也能落地,但需要自行处理权限、失败告警和状态追踪。


















