首页/云/云与容器速查/docker export/import 与 save/load 的区别
容器与 Docker106 条

docker export/import 与 save/load 的区别

export/import 搬的是『容器文件系统』(拍平、丢元数据);save/load 搬的是『镜像』(保留全部层与历史)。迁移部署产物用 save/load,清理过的快照才用 export。

云与容器速查云更新于 2026-10-13

两对命令的区别

save 与 load 搬的是镜像:保留全部层、标签、历史与元数据,导入后与原镜像一致,适合离线交付与跨仓库迁移。export 与 import 搬的是容器文件系统:把容器拍平成单层 tar,历史、环境变量、启动命令与健康检查全部丢失,导入后还要手工补回启动配置。把两者混用最常见的后果是“镜像是搬过去了,但容器起来行为不一样”。

基本信息

savedocker save -o 文件.tar 镜像:标签,可一次导出多个镜像
loaddocker load -i 文件.tar,恢复镜像与其标签,历史保留
exportdocker export -o 文件.tar 容器,导出容器文件系统(单层)
importdocker import tar 包 新镜像:标签,可用 --change 补回启动命令等配置
卷内容export 不含卷与 tmpfs 中的数据,需要单独备份
适用判断交付镜像用 save/load,分析或快照容器文件系统才用 export/import

典型使用场景

  • 内网离线部署:在能联网的机器上 save,再拷进内网 load
  • 跨镜像仓库迁移:不走公网中转,直接用 tar 传递
  • 合规或取证场景:把容器文件系统导出后离线分析
  • 把清理过后的问题容器做成单层镜像交给他人复现
  • 备份关键镜像的 tar 包,作为仓库故障时的兜底

使用示例

使用示例
docker save -o app-1.2.3.tar app:1.2.3   # 导出镜像(保留层与元数据)
docker load -i app-1.2.3.tar   # 在目标机器导入
docker images | grep app   # 确认标签已恢复
docker export -o snap.tar myapp   # 导出容器文件系统(单层,丢元数据)
docker import --change 'CMD ["/app"]' snap.tar myapp:snap   # 导入并补回启动命令
docker inspect --format '{{.Config.Cmd}}' myapp:snap   # 核对启动命令是否生效

四项对照

命令对象保留内容常见用途
docker save镜像全部层、标签、历史、元数据离线交付与迁移
docker loadtar 包恢复为完整镜像与 save 配对使用
docker export容器单层文件系统,丢历史与环境变量快照与离线分析
docker importtar 包生成单层镜像,可补启动命令从快照重建可运行镜像
export 出来的文件系统不含卷内容:业务数据挂在卷里时,容器快照不包含这部分数据,需要单独备份卷。
save 生成的 tar 体积等于镜像各层之和:大镜像导出前先评估磁盘空间,必要时先清理无用层或换用直接推送的迁移方式。

易错点

  • 用 export 代替镜像交付:环境变量、健康检查与启动命令全部丢失,运行行为不一致
  • import 后直接运行:缺启动命令导致起不来,需要 --change 显式补回
  • 以为 save 能带走容器里的数据:save 只处理镜像,容器内的改动不在其中
  • load 时遇到同名标签:旧标签被悄悄替换,回滚时找不到原版本
  • 跨架构机器之间传递 tar 包:镜像层能载入,但运行时仍然报 exec format error

数据来源与参考

  • Docker Docs:docker export
  • Docker Docs:docker save

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌