两对命令的区别
save 与 load 搬的是镜像:保留全部层、标签、历史与元数据,导入后与原镜像一致,适合离线交付与跨仓库迁移。export 与 import 搬的是容器文件系统:把容器拍平成单层 tar,历史、环境变量、启动命令与健康检查全部丢失,导入后还要手工补回启动配置。把两者混用最常见的后果是“镜像是搬过去了,但容器起来行为不一样”。
基本信息
| save | docker save -o 文件.tar 镜像:标签,可一次导出多个镜像 |
|---|---|
| load | docker load -i 文件.tar,恢复镜像与其标签,历史保留 |
| export | docker export -o 文件.tar 容器,导出容器文件系统(单层) |
| import | docker 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 load | tar 包 | 恢复为完整镜像 | 与 save 配对使用 |
| docker export | 容器 | 单层文件系统,丢历史与环境变量 | 快照与离线分析 |
| docker import | tar 包 | 生成单层镜像,可补启动命令 | 从快照重建可运行镜像 |
export 出来的文件系统不含卷内容:业务数据挂在卷里时,容器快照不包含这部分数据,需要单独备份卷。
save 生成的 tar 体积等于镜像各层之和:大镜像导出前先评估磁盘空间,必要时先清理无用层或换用直接推送的迁移方式。