Docker镜像导出导入使用docker save和load命令实现离线分发与迁移:save将镜像打包为tar(支持单/多镜像),load从tar恢复镜像;注意不压缩、架构兼容、版本匹配,且save/load优于export/import(后者仅操作容器快照)。

导出和导入 Docker 镜像是实现离线分发、环境隔离或跨机器迁移的常用方式,不依赖 Registry 服务,适合内网、安全受限或临时调试场景。核心命令是 docker save 和 docker load,配合 tar 包完成镜像的序列化与还原。
导出镜像为 tar 文件(本地保存)
使用 docker save 将一个或多个镜像打包成单个 tar 文件,保留所有层和元数据:
- 导出单个镜像(按镜像名或 ID):
docker save nginx:alpine -o nginx-alpine.tar - 导出多个镜像到同一 tar:
docker save nginx:alpine redis:7.2 -o web-cache.tar - 导出时可省略
-o,用重定向:docker save ubuntu:22.04 > ubuntu22.tar
注意:save 不压缩,生成的 tar 文件较大;如需减小体积,可后续用 gzip 压缩(如 gzip nginx-alpine.tar),但导入时需先解压。
导入镜像(从 tar 恢复到本地镜像库)
使用 docker load 从 tar 文件还原镜像,自动解包并注册到本地 docker images 列表:
- 标准导入:
docker load -i nginx-alpine.tar - 支持从 stdin 导入(适用于已压缩且解压后的流):
gunzip -c nginx-alpine.tar.gz | docker load - 导入后可用
docker images查看,镜像标签、ID、创建时间均保持原样
导入过程不启动容器,也不校验运行时依赖,仅恢复镜像本身。
跨主机迁移注意事项
在不同机器间迁移镜像时,需确保基础运行环境兼容:
- 目标主机必须安装相同或兼容版本的 Docker 引擎(建议 ≥ 源主机版本)
- 镜像中使用的 CPU 架构需匹配(如 x86_64 镜像不能直接在 ARM 主机上运行,除非启用 binfmt_misc + QEMU)
- 若镜像含构建阶段缓存(如
docker build --cache-from产物),save/load不包含构建缓存,仅镜像层 - 镜像内嵌的配置(如 ENV、CMD、EXPOSE)会完整保留,但挂载卷、网络设置等运行时参数不包含在镜像中
替代方案对比:save/load vs export/import
容易混淆的是 docker export / import,它们操作的是容器(而非镜像):
-
docker export CONTAINER_ID > container.tar:导出容器当前文件系统快照(扁平化,丢失历史层、元数据、CMD 等) -
docker import container.tar new-image:tag:生成新镜像,但无分层、无原始构建信息,仅用于简单备份或快速重建基础文件系统 - 真正迁移“可复现、可验证”的镜像,请始终使用
save/load,而非export/import
不复杂但容易忽略。










