首页/云/Docker 容器速查/save/load 与 export/import 的区别
镜像与构建107 条

save/load 与 export/import 的区别

save/load 面向镜像、保留层与标签;export/import 面向容器、只导出合并后的文件系统。两组命令对象与产物不同,不能混用。

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

两组命令搬的不是同一个东西

save 与 load 操作的是镜像:产物里包含分层结构、标签与构建历史,还原后镜像 ID 与标签都不变。export 与 import 操作的是容器:导出的是容器文件系统合并后的快照,导入后生成一个单层镜像,CMD、ENV 这类运行时元数据全部丢失,启动参数必须重新指定。两者产物都是 tar 文件,但内部结构不同,互相之间无法直接导入。

基本信息

save / load面向镜像,保留层、标签与历史元数据
export / import面向容器,导出合并后的文件系统快照
产物格式都是 tar,结构不同,不可互换
还原代价import 生成的镜像需要重新补齐启动参数

典型使用场景

  • 离线分发:用 save 打包镜像搬到隔离环境导入
  • 备份镜像版本:把验证过的镜像与标签整体留档
  • 提取容器现状:容器内手工改过配置,用 export 把当前文件系统拿出来分析
  • 制作快照:把运行中容器的文件系统固化成镜像用于追溯
  • 判断该用哪组命令:先问自己操作对象是镜像还是容器

两组命令并列对比

两组命令并列对比
# 镜像搬运:保留标签与分层
docker save -o web.tar app/web:1.0
docker load -i web.tar

# 容器快照:只导出合并后的文件系统
docker export web-running -o web-rootfs.tar
cat web-rootfs.tar | docker import - app/web:snapshot

# 导入后的镜像没有 CMD 与 ENV,启动时要显式补齐
docker run -d app/web:snapshot /app/start.sh

# 核对镜像结构差异
docker image inspect app/web:snapshot --format '{{.Config.Cmd}} {{len .RootFS.Layers}}'

两组命令对比

维度save / loadexport / import
操作对象镜像容器
产物内容分层数据、标签与构建历史合并后的文件系统快照
还原结果镜像 ID 与标签不变生成单层镜像,需重新指定启动参数
典型用途离线分发与镜像备份提取容器文件系统与制作快照
启动约定完整保留全部丢失,必须重新补齐
两者产物都是 tar,直接混用会得到格式错误或空镜像,判断标准是看操作对象而不是文件后缀。
用 import 得到的镜像做正式发布是不可行的:镜像里没有原来 Dockerfile 定义的启动命令、环境变量与工作目录。

易错点

  • 拿 export 产物当发布包:缺少 CMD、ENV 与工作目录,线上跑不起来还以为归档坏了
  • 用 import 的镜像做版本回溯:内容虽在,构建历史与镜像层信息已丢失,无法核对来源
  • 反复 import 同一容器:每导入一次就多一个单层镜像,磁盘增长快且难以分辨
  • 把两类命令写进同一个脚本分支:条件判断按对象类型来,镜像走 save,容器走 export

数据来源与参考

  • Docker 官方 CLI 参考:image save/load 与 container export/import(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌