最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Docker 镜像仓库迁移方案如何做
时间:2026-09-04 10:02:49 编辑:袖梨 来源:一聚教程网
镜像仓库迁移需按目标分类操作:一是本地存储路径迁移,推荐修改daemon.json的data-root;二是托管平台迁移,需批量替换镜像地址并重新构建推送;三是跨服务器离线迁移,依赖docker save/load加文件传输。
镜像仓库迁移不是简单换地址,得看你是想换存储位置、换托管平台,还是换仓库类型(比如从 Docker Hub 切到私有 Harbor)。不同目标对应不同操作逻辑,下面分三类说清楚。
一、本地镜像存储路径迁移(改 /var/lib/docker)
当磁盘空间告急或想用高性能 SSD 存镜像时,需要迁移 Docker 的根目录。推荐用 daemon.json 配置法,稳定且最新支持。
- 先停服务:
sudo systemctl stop docker - 新建目标目录并同步数据(保留原路径作备份):
sudo mkdir -p /data/docker && sudo rsync -aqxp /var/lib/docker/ /data/docker/ - 修改
/etc/docker/daemon.json,加入:{"data-root": "/data/docker"} - 重启并验证:
sudo systemctl start docker && docker info | grep "docker root dir" - 确认新路径运行正常后,再清理旧数据:
sudo rm -rf /var/lib/docker
注意权限和 SELinux:目标目录需 chown root:root、chmod 700;CentOS/RHEL 上可能要执行 sudo setsebool -P container_manage_cgroup on 或调整策略。
二、镜像托管平台迁移(如 GitHub → GitCode 或 Docker Hub → Harbor)
这类迁移重点是批量更新镜像引用地址,并重新构建推送,避免手动改几百个 Dockerfile。
- 用脚本统一替换所有
FROM行中的 registry 地址,例如把r.j3ss.co/nginx替成gitcode.com/gh_mirrors/do/dockerfiles/nginx - 修改构建脚本(如 Makefile),让
make image自动带上新 registry 前缀 - 逐个构建并推送:
docker build -t new-registry/app:v1 . && docker push new-registry/app:v1 - 推送前确保已登录:
echo "$PASSWORD" | docker login --username "$USER" --password-stdin new-registry
若涉及私有仓库,还需在 /etc/docker/daemon.json 中配置 insecure-registries(仅限测试环境)或部署 TLS 证书。
三、跨服务器镜像迁移(无网络或离线环境)
适合生产环境隔离、内网部署或带宽受限场景,核心是导出 + 传输 + 导入。
- 源机导出镜像:
docker save -o app.tar app:v2.1(可加| gzip压缩) - 用 scp/rsync 把 tar 文件传到目标机
- 目标机导入:
docker load -i app.tar - 检查是否成功:
docker images | grep app
注意点:源和目标的 Docker 版本尽量一致(尤其低于 v20.10 时兼容性更敏感);如果镜像有多个 tag,建议导出时明确指定完整标签,避免加载后 tag 缺失;若含构建阶段多层镜像,save/load 能完整保留所有 layer 和历史信息。