跨机房镜像迁移应使用skopeo+regsync或Harbor Replication等专业工具实现安全、可靠、增量同步;需配置网络互通、只读/写权限及证书信任;通过digest校验、断点续传与过滤规则确保一致性,并验证运行可用性及监控同步状态。

通过 Docker 镜像仓库同步工具实现跨机房迁移,核心是解决镜像在不同物理位置(如北京机房 ↔ 深圳机房)之间的安全、可靠、增量传输问题。不依赖直接拉取/推送(易中断、无校验、难审计),而是借助专业同步工具完成元数据+层文件的一致性复制。
选对同步工具:推荐 skopeo + regsync 或 Harbor Replication
生产环境常用组合:
- skopeo:轻量、支持多种 registry 协议(Docker Hub、Harbor、Quay、自建 registry),可校验 digest、跳过已存在层、断点续传;适合脚本化、定时同步。
- regsync(by distribution/distribution):专为 registry-to-registry 同步设计,支持过滤命名空间、按标签正则匹配、并发控制、健康检查和失败重试;配置简洁,适合中大型镜像库。
- Harbor 内置 Replication:若两端均为 Harbor,优先启用其图形化复制策略,自动处理权限、触发条件(如 tag 新增)、事件驱动同步,且自带任务日志与状态追踪。
准备跨机房网络与认证
两地 registry 必须可互通(建议走专线或 IP 白名单),且需提前配置访问凭证:
- 源 registry 开放只读账号(如
pull-only用户),避免同步过程误删或覆盖; - 目标 registry 提前创建同名项目(如
prod/nginx),并赋予同步账号 push 权限; - 若使用 HTTPS + 自签名证书,需将 CA 证书注入同步容器的 trust store(如挂载
/etc/ssl/certs/ca.crt并更新 ca-certificates)。
执行同步:以 regsync 为例
编写 config.yaml 描述源/目标及过滤规则:
registries: - name: beijing-registry url: https://bj-registry.example.com username: sync_reader password: "xxx" - name: shenzhen-registry url: https://sz-registry.example.com username: sync_writer password: "yyy" <p>syncs:</p><ul><li>name: prod-images src: beijing-registry/prod dst: shenzhen-registry/prod images: include: ["nginx:.*", "redis:v[0-9]+\.[0-9]+"] on-failure: continue
运行命令启动同步:
regsync --config config.yaml --once
它会自动比对 manifest digest,仅传输缺失或不一致的 layer,跳过本地已存在的内容,支持 --dry-run 先预演。
验证与可观测性
迁移不是“跑完就结束”,必须验证一致性:
- 对比源/目标相同 tag 的
sha256:xxxdigest(用skopeo inspect); - 随机 pull 一个镜像到测试节点,
docker run --rm -it xxx:tag /bin/sh -c 'echo ok'确认可运行; - 记录每次同步耗时、传输字节数、跳过层数,接入 Prometheus + Grafana 监控长期趋势;
- 将同步日志接入 ELK 或 Loki,便于排查 tag 被过滤、认证失败等异常。

















