核心是备份存储卷、保留配置、定期验证三者缺一不可:镜像层数据需确认挂载路径并同步,元数据与配置(如config.yml、postgresql数据库、认证信息)必须单独备份,对象存储后端则重点做桶复制与db导出,每次备份后须校验完整性、标签可达性及模拟恢复。

直接备份 Docker 镜像仓库(如 Registry 或 Harbor)的核心,是保护其底层存储数据和元数据,而不是只导出镜像本身。关键在于:备份存储卷 + 保留配置 + 定期验证,三者缺一不可。
明确备份对象:不只是镜像文件
镜像仓库的数据分两类:
-
镜像层数据:默认存于文件系统(如
/var/lib/registry),或对接对象存储(S3/OSS/MinIO);需确认实际挂载路径,用docker volume inspect registry-data查看 -
元数据与配置:包括仓库配置文件(
config.yml)、认证信息、复制规则(Harbor 的项目/策略设置)、数据库(Harbor 使用 PostgreSQL + Redis)——这些不备份,恢复后可能无法登录或同步失效
选择适合的备份方式
根据部署形态选方法:
-
本地文件存储型(如自建 Registry):用
rsync -avz --delete /var/lib/registry/ /backup/registry/做增量同步;配合cron每日执行,保留最近 7 天快照 -
对象存储后端(如 Harbor 接 S3):无需备份文件目录,重点做对象存储桶的跨区域复制或版本控制开启;同时单独备份 Harbor 的 PostgreSQL 数据库:
pg_dump -h postgres -U postgres registry > harbor-db-$(date +%Y%m%d).sql -
容器化部署(如 Harbor Helm Chart):备份
values.yaml配置、TLS 证书、以及所有 PVC 对应的 PV 数据(尤其是harbor-core和harbor-jobservice的配置卷)
必须做的验证环节
备份文件存在 ≠ 能恢复成功。每次备份后建议自动执行:
- 校验 tar 包完整性:
gzip -t backup_20260729.tar.gz - 检查镜像可加载性:随机抽取一个镜像 ID,用
skopeo list-tags docker://your-registry.local/myapp确认标签可达 - 模拟恢复测试:每月至少一次,在隔离环境还原备份,拉取一个镜像并运行容器,验证 manifest 和 layer 可读
避免常见坑点
很多团队踩过的实际问题:
- 只备份
/var/lib/registry却忽略config.yml中的http.secret,导致恢复后 token 全失效 - Harbor 启用了 LDAP 或 OIDC 认证,但没备份对应配置项,恢复后用户无法登录
- 用
docker save备份单个镜像 → 这只是镜像副本,不是仓库备份;仓库崩溃时,你仍会丢失所有 tag 关系、历史推送记录、扫描结果等 - 备份时仓库正在写入,造成文件锁或不一致;正确做法是暂停写入(或用 read-only 模式)再备份,Harbor 可通过 API 设置维护模式











