docker save、scp、docker load三步完成离线镜像迁移,关键在于确保架构一致、标签完整、不漏层;需确认平台、规范导出、安全传输、加载后验证。

直接用 docker save 打包、scp 传过去、再用 docker load 加载,三步就能完成,关键在细节不丢标签、不漏层、不跨架构。
一、导出前确认镜像状态和平台一致性
离线环境往往对镜像架构敏感。若你在 Mac(ARM64)上打包,目标却是 x86_64 的物理服务器,直接拉取并导出可能导致运行失败。
- 先明确目标服务器架构:执行
uname -m或arch查看,常见为x86_64或aarch64 - 联网机器上拉取时加
--platform参数,例如:docker pull --platform linux/amd64 nginx:1.25 - 导出前用
docker images核对镜像名+标签是否完整显示,避免只用 ID 导出(否则导入后无名称、无版本)
二、高效打包:单镜像清晰,多镜像合并,大镜像必压缩
导出命令看似简单,但选错方式会影响后续验证与维护。
- 单个镜像(推荐):
docker save -o app-web.tar app-web:prod-v2.3 - 多个关联镜像(如前后端+DB):
docker save -o full-stack.tar nginx:alpine redis:7 mysql:8.0 - 体积较大(>500MB)建议边存边压:
docker save app-web:prod-v2.3 | gzip > app-web.tar.gz
传输后在目标机解压:gunzip app-web.tar.gz
三、安全传输:优先用 scp,断点续传可用 rsync
只要两台机器能 SSH 连通,scp 就是最轻量、最可靠的选择;不需要额外安装工具,全程加密。
- 从本地推送到离线服务器:
scp app-web.tar user@192.168.10.50:/tmp/ - 若文件大、网络不稳定,改用 rsync 支持断点续传:
rsync -avz --progress app-web.tar user@192.168.10.50:/tmp/ - 无网络?U 盘或内网 FTP 也可,注意 tar 文件权限(建议保持 644,避免加载时报 permission denied)
四、离线加载与验证:别跳过最后两步检查
加载不是终点,验证才是上线前最后一道关卡。
- 进入目标服务器,确保在 tar 文件所在目录执行:
docker load -i app-web.tar
(若为 gzip 压缩包,先解压再 load) - 立即验证:
docker images | grep app-web—— 确认名称、标签、REPOSITORY 列完整docker run --rm app-web:prod-v2.3 /bin/sh -c "echo 'OK' && exit 0"—— 快速测试镜像能否启动 - 如需立即运行服务,配合
docker run或docker-compose up -d,注意端口、卷、网络等配置已在镜像外定义,与打包无关
整个过程不依赖 Docker Hub,也不修改镜像内容,真正实现“所见即所得”的离线迁移。











