docker save/load 是实现内网镜像离线迁移的核心方法:先用 save 将镜像打包为 tar(支持单/多镜像及 gzip 压缩),再通过物理介质或内网传输至目标机,最后用 load 恢复镜像;全程不依赖外网或 Registry,完整保留层结构、元数据与标签,适用于金融、政务等隔离环境。

用 docker save 和 docker load 实现内网镜像离线迁移,核心是把镜像打包成 tar 文件,再复制到目标机器加载。整个过程不依赖外网或镜像仓库,适合金融、政务、工业现场等网络隔离场景。
一、导出镜像:用 save 打包成 tar
在有网络的源机器(如开发机或跳板机)上执行:
- 导出单个镜像(推荐用完整标签):
docker save -o nginx-alpine.tar nginx:alpine - 导出多个镜像到同一个 tar(节省传输次数):
docker save -o web-stack.tar nginx:1.25 redis:7.2 busybox:1.36 - 导出时直接压缩(减小体积,适合带宽受限环境):
docker save nginx:alpine | gzip > nginx-alpine.tar.gz
注意:save 不压缩默认输出,生成的 tar 文件较大;若后续要压缩,gzip 是最通用选择,目标机器无需提前解压。
二、传输文件:离线拷贝到内网机器
tar 文件本质是普通二进制文件,可用任意安全方式传输:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 局域网内用 scp:
scp nginx-alpine.tar user@192.168.10.5:/tmp/ - 物理介质(U盘、移动硬盘)拷贝后手动粘贴
- 通过内网 FTP/NFS/Samba 共享目录上传下载
传输前确认目标机器磁盘空间充足(tar 文件大小 ≈ 镜像实际大小,加载时还需额外临时空间)。
三、导入镜像:用 load 恢复到本地镜像库
在目标内网机器上执行:
- 加载普通 tar:
docker load -i nginx-alpine.tar - 加载 gzip 压缩包(无需先解压):
zcat nginx-alpine.tar.gz | docker load - 验证是否成功:
docker images | grep nginx —— 应显示原标签、ID 和创建时间
导入后镜像可直接用于 docker run 或编排工具(如 docker-compose),所有层、元数据、多标签均保持原样。
四、关键注意事项
避免踩坑,重点关注这几点:
- Docker 版本兼容性:目标机器 Docker 版本 ≥ 源机器版本,否则可能无法识别新格式层
- 架构匹配:AMD64 镜像不能直接 load 到 ARM64 机器(除非镜像本身是 multi-arch 并已 manifest 适配)
- 别混淆 export/import:后者操作的是容器快照,会丢失历史层和构建信息,仅适用于临时备份运行中状态
-
标签不是必须的:即使源镜像没打标签,只要知道 ID(如
docker images --no-trunc查 SHA256),也能用 ID 导出

















