docker export 是什么
export 把容器的根文件系统打包成 tar 归档,默认写到标准输出。产物是扁平化的快照:只剩文件内容,分层信息、镜像配置、环境变量与启动命令都不在里面。它与 save 常被混淆——save 针对镜像并保留分层与标签,export 针对容器且丢掉这些元数据。要恢复成镜像,需要用 import。
基本信息
| 语法 | docker export [-o 文件] 容器 |
|---|---|
| 输出 | tar 归档,默认输出到标准输出可配合 gzip |
| 包含内容 | 容器可写层与镜像层合并后的根文件系统 |
| 不包含 | 分层历史、镜像配置、标签、环境变量 |
| 不包含卷 | 挂载卷中的内容不在归档内 |
| 还原方式 | docker import 导入为可运行镜像 |
典型使用场景
- 迁移旧式根文件系统:把运行已久的容器整体打包带走到新环境
- 取回容器内产物:需要整个文件系统而不是单个文件时
- 救援场景:容器已经起不来,先导出内容再做分析
- 制作基础根文件系统给其他构建流程使用
- 与 save 对比验证:确认镜像分层之外多出哪些运行期改动
导出与还原
导出与还原
# 导出为文件,注意文件体积可能远大于同镜像的 save 产物
docker export web -o web-rootfs.tar
# 管道压缩,减少传输体积
docker export web | gzip > web-rootfs.tar.gz
# 排除明显不需要的目录:先导出再按需裁剪
docker export web -o web-rootfs.tar
# tar --delete -f web-rootfs.tar -C . var/cache
# 还原为镜像并补上启动配置(import 支持 --change 追加指令)
docker import --change 'CMD ["nginx","-g","daemon off;"]' web-rootfs.tar app/web:imported
docker run --rm app/web:imported nginx -vexport 与 save 对比
| 维度 | docker export | docker save |
|---|---|---|
| 对象 | 容器 | 镜像 |
| 分层与历史 | 压平为单层 | 完整保留 |
| 标签与配置 | 丢失 | 保留 |
| 还原命令 | docker import | docker load |
| 卷数据 | 不含 | 不含 |
| 典型用途 | 根文件系统迁移 | 镜像分发与备份 |
导出的归档不能直接 docker run:必须先用 import 变成镜像,并在导入时补齐启动命令、端口与用户等配置,否则容器可能启动即退出。
export 不包含卷里的数据,用整机迁移的思路操作时最容易漏掉数据库目录,恢复后才发现服务有程序没数据。