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

用 docker save 和 docker load 进行离线镜像迁移,核心是把镜像导出为 tar 包,再在目标机器导入。整个过程不依赖网络和镜像仓库,适合内网、断网或安全受限环境。
如何用 save 打包镜像为 tar 文件
docker save 命令将一个或多个镜像保存为本地 tar 归档文件,支持按镜像名、ID 或 tag 指定。
- 保存单个镜像(推荐带 tag,避免混淆):
docker save nginx:alpine -o nginx-alpine.tar - 保存多个镜像(用空格分隔):
docker save redis:7 alpine:latest -o multi-images.tar - 保存镜像并压缩(节省空间,需配合 gzip):
docker save ubuntu:22.04 | gzip > ubuntu-22.04.tar.gz
注意:不加 -o 参数会直接输出到标准输出,需重定向;若镜像有多个 tag,save 会包含所有关联层,不会重复存储。
如何用 load 导入 tar 文件到目标机器
docker load 从 tar 文件恢复镜像,自动解压并注册到本地镜像列表,无需提前创建容器。
- 导入普通 tar 文件:
docker load -i nginx-alpine.tar - 导入 gzip 压缩包(Linux/macOS 下可直接 pipe):
zcat ubuntu-22.04.tar.gz | docker load - 查看导入结果:
docker images(确认镜像已存在且 REPOSITORY/TAG 正确)
提示:load 不会自动拉取缺失的基础层——它只还原 save 时已有的完整镜像结构,所以源镜像必须是“完整可运行”的(即所有依赖层都已本地存在)。
常见问题与注意事项
- 镜像名和 tag 会保留:save/load 后镜像名、tag、ID 全部不变,但新机器上可能没有对应 tag 别名,建议 save 时明确指定 tag
- 不包含运行时数据:只打包镜像本身,不含容器、卷、网络或构建缓存
- 跨平台兼容性有限:ARM 镜像不能直接 load 到 x86 主机(除非开启 binfmt_misc),需确保架构匹配
- 大镜像建议加压缩:比如 1GB 镜像用 gzip 可减少 30%~50% 体积,传输更高效
整个流程简单可靠,适合批量迁移、备份或交付给无公网访问权限的客户环境。


















