Exited状态的Docker容器可导出文件系统:用docker export生成tar包(不含镜像层/元数据/挂载卷),或用docker cp提取指定目录;导出前需确认容器存在且未被rm删除。

当Docker容器处于 Exited 状态(即已停止但未被删除),其文件系统依然完整保留在本地,可以安全导出。关键在于:容器必须存在(docker ps -a 能查到),且未被 docker rm 删除。
确认容器状态和ID
先列出所有容器(含已退出的):
-
docker ps -a—— 找到目标容器的 CONTAINER ID 或 NAME,确认 STATUS 为 Exited - 记下该ID(如
a1b2c3d4e5f6)或容器名(如my-app),后续操作将用到
使用 docker export 导出为 tar 包
docker export 是最直接的方式,它将容器当前的文件系统快照打包成 tar 流,不包含镜像层、元数据或历史记录,适合归档或迁移运行时状态:
- 执行命令:
docker export a1b2c3d4e5f6 > container-rootfs.tar - 也可重定向并压缩:
docker export a1b2c3d4e5f6 | gzip > container-rootfs.tar.gz - 导出结果是扁平化的文件系统(类似 chroot 环境),不含 /proc、/sys 等虚拟文件系统,也不含容器启动时挂载的卷内容
替代方式:用 docker cp 提取指定目录
若只需提取部分文件(如配置、日志、输出数据),docker cp 更精准高效:
- 从已退出容器拷贝整个根目录:
docker cp a1b2c3d4e5f6:/ ./container-files/ - 拷贝单个文件:
docker cp a1b2c3d4e5f6:/app/output.log ./ - 注意:
docker cp对 Exited 容器完全支持,无需重启容器
注意事项与常见问题
导出前请留意以下几点:
- 导出内容不含挂载卷:–volumes 挂载的宿主机路径不会被打包进 export 或 cp 的根目录中,需单独备份
- export 不保留权限和硬链接:tar 包中文件权限可能被简化,符号链接保留,硬链接会被转为独立文件
-
避免误删容器:导出后如需保留容器用于后续调试,不要执行
docker rm;如已删除,则无法恢复文件系统 -
空间占用:导出的 tar 文件大小 ≈ 容器可写层(top layer)+ 所有只读层合并后的实际占用,通常小于
docker system df显示的“Size”值









