docker save/load 是最稳妥通用的离线镜像传输方式,可导出导入镜像及其所有依赖层,保留完整结构与标签,但不包含容器状态或构建上下文。

在没有网络或需要迁移镜像的场景下,用 docker save 导出镜像为 tar 包,再用 docker load 在目标机器导入,是最稳妥、最通用的离线镜像传输方式。
导出单个或多个镜像(save)
docker save 会把镜像及其所有依赖层打包成一个 tar 文件,保留完整镜像结构(包括历史、元数据和文件系统层)。注意:它不导出容器运行时状态(如挂载卷、网络配置),只处理镜像本身。
- 导出单个镜像(按镜像名或 ID):
docker save nginx:alpine -o nginx-alpine.tar - 导出多个镜像(空格分隔):
docker save ubuntu:22.04 centos:7 -o multi-images.tar - 导出镜像并压缩(节省空间,需配合 gzip):
docker save nginx:alpine | gzip > nginx-alpine.tar.gz
加载镜像到本地镜像仓库(load)
docker load 从 tar 包恢复镜像,自动解压并注册到本地 Docker daemon 的镜像列表中。加载后可用 docker images 查看,镜像标签、ID、大小等信息与导出前一致。
- 加载普通 tar 包:
docker load -i nginx-alpine.tar - 加载 gzip 压缩包(无需先解压):
zcat nginx-alpine.tar.gz | docker load - 查看是否加载成功:
docker images | grep nginx
常见问题与注意事项
save/load 是镜像级操作,不是容器级;它不涉及 registry 推拉逻辑,也不校验镜像签名。实际使用中容易忽略几个关键点:
- 确保目标机器 Docker 版本 ≥ 导出机器版本(低版本可能无法识别新格式层)
- tar 包不含镜像构建上下文或 Dockerfile,仅含运行时所需层,不可用于重新构建
- 若镜像有多个 tag,save 会全部导出;但 load 后所有 tag 都会存在,不会丢失别名
- save 不支持直接导出正在运行的容器,如需容器状态,请用 docker commit 先生成镜像再 save
替代方案对比:save/load vs export/import
别混淆 save/load 和 export/import —— 后者操作对象是容器(非镜像),导出的是容器文件系统快照(已合并所有层),丢失历史记录、元数据和层级结构,也无法保存多层镜像关系。
- ✅ 用 save/load:迁移镜像、备份镜像、离线部署、CI/CD 离线交付
- ❌ 别用 export/import 替代:它不能还原原始镜像,也不能用于镜像复用或调试构建过程

















