docker save/load 可离线迁移镜像:先用 save 打包为 tar(支持单/多镜像及 gzip 压缩),再传输至目标机,最后用 load 恢复,全程不依赖网络或 registry,完整保留层结构、元数据与标签。

用 docker save 和 docker load 就能完成整个过程,不依赖网络、不经过镜像仓库,导出的是完整镜像(含所有层、标签、元数据),导入后和原来一模一样。
导出镜像:打包成 tar 文件
在能联网的机器上操作,确保镜像已存在本地(没拉过先 docker pull):
- 导出单个带明确标签的镜像(避免导入后只剩 ID):
docker save -o nginx-1.25.tar nginx:1.25 - 一次导出多个镜像(适合整套服务):
docker save -o app-stack.tar nginx:1.25 redis:7.2 python:3.11-slim - 边打包边压缩(节省传输体积,目标机不用解压):
docker save nginx:1.25 | gzip > nginx-1.25.tar.gz
注意:别用 docker export ——它只导出容器快照,会丢掉构建历史、环境变量、多层结构,不能还原原始镜像。
传输文件:安全拷到内网机器
tar 是普通二进制文件,选一种你环境支持的方式传过去即可:
- 局域网内常用
scp:scp nginx-1.25.tar user@192.168.10.100:/tmp/ - U 盘或移动硬盘手动复制
- 通过内网 FTP、Samba 或 NFS 共享目录上传下载
传输前确认目标机器磁盘空间充足:tar 文件大小 ≈ 镜像实际占用空间,加载时还需额外临时空间。
导入镜像:恢复到本地镜像库
在目标内网机器上执行:
- 加载普通 tar:
docker load -i nginx-1.25.tar - 加载 gzip 压缩包(无需先解压):
zcat nginx-1.25.tar.gz | docker load - 验证是否成功:
docker images | grep nginx—— 应能看到原标签、ID 和大小
导入后即可直接 docker run 启动容器,和在线拉取的镜像行为完全一致。
关键注意事项
- 目标机器 Docker 版本建议 ≥ 导出机器版本,低版本可能无法识别新格式层
- 若镜像有多个 tag(比如同时标了
:latest和:v1.0),save会全部导出,load后也都保留 - tar 包不含 Dockerfile 或构建上下文,仅含运行所需层,不可用于重新构建
- 如需跨架构(例如 M 芯片 Mac 导出给 x86 服务器用),拉取时要加
--platform linux/amd64











