docker save/load 是最稳妥的镜像迁移方式,可完整保留标签、历史层和元数据;导出支持单镜像、多镜像打包及边导出边压缩,导入需用 -i 指定 tar 文件。

直接用 docker save 导出镜像、docker load 导入镜像,是最稳妥、最常用的方式。它能完整保留镜像的标签、历史层、元数据,迁移后可直接运行,适合绝大多数生产场景。
导出镜像:用 docker save 打包成 tar 文件
导出前先确认镜像名称和标签:
docker images
然后执行导出命令,推荐用 -o 指定输出路径,清晰可控:
-
导出单个镜像(带标签):
docker save -o nginx-1.24.tar nginx:1.24 -
导出多个镜像到同一个 tar 包:
docker save -o apps.tar nginx:1.24 redis:7.0 mysql:8.0 -
边导出边压缩(节省空间):
docker save nginx:1.24 | gzip > nginx-1.24.tar.gz
注意:用镜像名+tag 导出,后续导入时标签会自动恢复;若只用 IMAGE ID(如 docker save abc123 > a.tar),导入后虽有镜像,但 docker images 不显示名称和 tag,需手动打标。
导入镜像:用 docker load 从 tar 恢复
导入操作简单,但要注意输入方式:
-
标准方式(推荐):
docker load -i nginx-1.24.tar -
等效写法(管道方式):
docker load -
导入压缩包:
gunzip -c nginx-1.24.tar.gz | docker load或先解压再 load
成功导入后,运行 docker images 应能看到原样恢复的镜像(含名称、tag、CREATED 时间)。如果没看到,大概率是导出时用了 ID 而非名称——此时可用 docker images --no-trunc 查看完整 ID,再用 docker tag 补标签,例如:docker tag abc123456789 nginx:1.24。
别把 export/import 和 save/load 搞混
这两个组合看起来相似,但本质不同,不能互相替代:
-
save/load 针对镜像:保留全部 layer、历史、标签,支持
docker history、docker tag回滚,是迁移首选。 - export/import 针对容器:只保存容器当前文件系统快照,丢弃所有镜像层信息和元数据,导入后是一个“扁平”新镜像,无法追溯构建过程。
除非你明确需要精简镜像或做一次性快照备份,否则不要用 export/import 替代 save/load。
常见问题与快速验证
导入后镜像“看不见”?先检查三件事:
- 是否导出时用了 IMAGE ID?改用
镜像名:tag重导一次更省事。 - 是否在错误目录执行 load?确保
.tar文件路径正确,或加绝对路径。 - 是否已有同名同 tag 镜像?Docker 不会覆盖,但会加载新 ID —— 可用
docker images -a查看所有镜像(含悬虚镜像)。
验证是否真正可用,拉起一个临时容器试试:docker run --rm nginx:1.24 nginx -v。能输出版本即说明镜像完整无损。











