Skip to content

docker save和docker export

docker savedocker export 是 Docker 中两个用于导出容器或镜像的命令,但它们的用途和工作方式有显著区别。

作用对象不同

docker save
操作对象是镜像image)。
• 将一个或多个镜像打包成归档文件(.tar),包括镜像的所有层、标签、历史记录和元数据。
• 适用于备份或迁移镜像到其他环境。

docker export
操作对象是容器container)。
• 将容器的当前文件系统状态导出为一个归档文件(.tar),不包含镜像的层、历史记录或元数据。
• 仅保存容器的快照,适用于分享容器的文件系统状态。

输出内容不同

docker save
• 保留完整的镜像结构(包括所有层),导出的文件可以通过 docker load 恢复为原始镜像。
• 支持多镜像打包(例如 docker save -o images.tar image1 image2)。

docker export
• 仅导出容器的文件系统(扁平化结构),丢失镜像的分层信息和元数据(如 ENTRYPOINTCMD、环境变量等)。
• 导出的文件需要通过 docker import 重新创建为镜像,且生成的镜像无历史记录。

典型用途

docker save
• 备份镜像供后续使用(例如离线环境部署)。
• 迁移镜像到其他 Docker 主机。

docker export
• 快速分享容器的文件系统(例如调试或分析)。
• 基于容器状态创建新镜像(但需手动重新配置元数据)。

如何使用

docker save

bash
docker save -o my_image.tar my_image:tag
docker load -i my_image.tar  # 恢复镜像

docker export

bash
docker export -o my_container.tar my_container
docker import my_container.tar new_image:tag  # 导入为镜像

关键区别总结

特性docker savedocker export
操作对象镜像(image容器(container
输出内容完整镜像(含层和元数据)容器文件系统快照(无层/元数据)
恢复命令docker loaddocker import
是否保留历史记录
典型场景镜像备份/迁移容器状态快照

如何选择

• 需要备份或迁移镜像(保留完整配置) → docker save
• 仅需容器当前的文件系统(如调试或生成新镜像) → docker export

理解两者的差异可以避免误用导致数据丢失(例如误用 export 丢失镜像的启动配置)。