docker save/load是离线迁移最可靠方式,打包完整镜像(含所有层、标签、配置及历史),不依赖网络或仓库;需确保docker版本≥20.10、架构匹配,并避免与export/import混淆。

用 docker save 和 docker load 迁移镜像,是离线环境下最可靠的方式。它打包的是完整镜像(含所有层、标签、配置和历史记录),不是容器快照,也不依赖网络或镜像仓库。
导出镜像:打包成 tar 文件
docker save 把镜像序列化为一个自包含的 .tar 归档,适合拷贝、备份或跨主机传输。
- 导出单个镜像:
docker save -o nginx.tar nginx:latest - 一次导出多个镜像(共用一个 tar):
docker save -o apps.tar nginx:alpine redis:7.2 myapp:v2.1 - 省略
-o,用重定向效果相同:docker save ubuntu:22.04 > ubuntu.tar - 如需减小体积,可后续压缩:
gzip nginx.tar得到nginx.tar.gz,但导入时得先解压或配合管道使用
导入镜像:还原到本地 Docker 环境
docker load 读取 tar 文件,重建镜像并注册到本地镜像列表,原有标签和镜像 ID 全部保留。
- 从文件加载:
docker load -i nginx.tar - 从标准输入加载(适合已压缩的流):
gunzip -c nginx.tar.gz | docker load或cat nginx.tar | docker load - 导入后运行
docker images即可确认镜像是否存在,状态与导出前一致
关键注意事项
save/load 看似简单,但实际迁移中容易忽略几个硬性前提:
- 目标机器的 Docker 版本不宜过低(建议 ≥ 20.10),否则可能无法识别新镜像格式
- 镜像架构需匹配:x86_64 镜像不能直接在 ARM64 主机上 load 后运行,除非启用 binfmt_misc 或使用 buildx
- 不包含运行时数据:volume 内容、容器网络设置、挂载的宿主机路径等都不会被保存,需单独处理
- 避免和 export/import 混用:后者操作的是容器(
docker export),只保存文件系统快照,丢失元数据和分层结构
常见问题快速排查
如果 load 后 docker images 看不到镜像,先检查:
- 是否用错命令:误用了
docker import(它需要容器快照,不是镜像 tar) - tar 文件是否损坏或传输不完整(可用
tar -tf xxx.tar | head查看内容) - Docker daemon 是否正常运行,特别是 Windows 上需确认 WSL2 或 Hyper-V 已就绪
- 镜像是否已存在相同层 ID,Docker 会跳过重复加载,但不会报错——可加
--quiet或观察输出确认进度











