一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Docker 镜像仓库迁移方案如何做

时间:2026-09-04 10:02:49 编辑:袖梨 来源:一聚教程网

镜像仓库迁移需按目标分类操作:一是本地存储路径迁移,推荐修改daemon.json的data-root;二是托管平台迁移,需批量替换镜像地址并重新构建推送;三是跨服务器离线迁移,依赖docker save/load加文件传输。

镜像仓库迁移不是简单换地址,得看你是想换存储位置、换托管平台,还是换仓库类型(比如从 Docker Hub 切到私有 Harbor)。不同目标对应不同操作逻辑,下面分三类说清楚。

一、本地镜像存储路径迁移(改 /var/lib/docker)

当磁盘空间告急或想用高性能 SSD 存镜像时,需要迁移 Docker 的根目录。推荐用 daemon.json 配置法,稳定且最新支持。

  1. 先停服务:sudo systemctl stop docker
  2. 新建目标目录并同步数据(保留原路径作备份):sudo mkdir -p /data/docker && sudo rsync -aqxp /var/lib/docker/ /data/docker/
  3. 修改 /etc/docker/daemon.json,加入:

    {"data-root": "/data/docker"}

  4. 重启并验证:sudo systemctl start docker && docker info | grep "docker root dir"
  5. 确认新路径运行正常后,再清理旧数据:sudo rm -rf /var/lib/docker

注意权限和 SELinux:目标目录需 chown root:rootchmod 700;CentOS/RHEL 上可能要执行 sudo setsebool -P container_manage_cgroup on 或调整策略。

二、镜像托管平台迁移(如 GitHub → GitCode 或 Docker Hub → Harbor)

这类迁移重点是批量更新镜像引用地址,并重新构建推送,避免手动改几百个 Dockerfile。

  1. 用脚本统一替换所有 FROM 行中的 registry 地址,例如把 r.j3ss.co/nginx 替成 gitcode.com/gh_mirrors/do/dockerfiles/nginx
  2. 修改构建脚本(如 Makefile),让 make image 自动带上新 registry 前缀
  3. 逐个构建并推送:docker build -t new-registry/app:v1 . && docker push new-registry/app:v1
  4. 推送前确保已登录:echo "$PASSWORD" | docker login --username "$USER" --password-stdin new-registry

若涉及私有仓库,还需在 /etc/docker/daemon.json 中配置 insecure-registries(仅限测试环境)或部署 TLS 证书。

三、跨服务器镜像迁移(无网络或离线环境)

适合生产环境隔离、内网部署或带宽受限场景,核心是导出 + 传输 + 导入。

  1. 源机导出镜像:docker save -o app.tar app:v2.1(可加 | gzip 压缩)
  2. 用 scp/rsync 把 tar 文件传到目标机
  3. 目标机导入:docker load -i app.tar
  4. 检查是否成功:docker images | grep app

注意点:源和目标的 Docker 版本尽量一致(尤其低于 v20.10 时兼容性更敏感);如果镜像有多个 tag,建议导出时明确指定完整标签,避免加载后 tag 缺失;若含构建阶段多层镜像,save/load 能完整保留所有 layer 和历史信息。

热门栏目