资讯动态

如何用 docker compose export 导出服务容器文件系统为 tar 归档做数据备份?

发布时间:2026/9/10 11:19:09 来源:尧图企业网站定制
如何用 docker compose export 导出服务容器文件系统为 tar 归档做数据备份【免费下载链接】composeDefine and run multi-container applications with Docker项目地址: https://gitcode.com/GitHub_Trending/compose/compose当容器内运行态的数据需要留存时例如应用把文件直接写进容器文件系统而非挂载卷docker compose export可以把某个服务容器的完整文件系统导出为一个 tar 归档作为备份文件保留。该命令的官方描述是 “Export a service containers filesystem as a tar archive”用法为docker compose export [OPTIONS] SERVICE前提是目标服务当前正在运行——对未运行的服务执行会直接报错。命令与参数命令格式来自 docs/reference/compose_export.md 与 docs/reference/docker_compose_export.yamldocker compose export [OPTIONS] SERVICE选项类型默认值说明--dry-runboolExecute command in dry run mode试运行不实际写文件--indexint0index of the container if service has multiple replicas服务有多个副本时指定导出哪一个容器-o,--outputstringWrite to a file, instead of STDOUT写入文件而不是标准输出参数定义见 cmd/compose/export.go实现见 pkg/compose/export.go。准备一个正在运行的服务以下是最小可运行的示例配置取自仓库 e2e 测试的测试数据 pkg/e2e/testdata/TestExport/compose.yamlservices: service: image: alpine command: sleep infinity先把服务启动起来并确认其处于运行状态docker compose up -d service这一步是必要的export只针对正在运行的容器服务未启动时命令不会静默跳过而是返回错误见“错误信息速查”一节。单副本服务导出备份docker compose export -o service.tar service-o service.tar指定归档落盘路径可用绝对路径或任意合法输出路径不带-o时归档内容写到 STDOUT。在交互式终端stdout 是 TTY中不带-o会被拒绝实现pkg/compose/export.go返回的错误为output option is required when exporting to terminal。因此在终端里做备份时应显式带上-o。输出文件通过原子写入方式创建文件权限为0600仅所有者可读写适合存放备份内容。想先确认操作而不写文件可加全局参数--dry-run试运行该模式下跳过实际写盘。仓库 e2e 测试 pkg/e2e/export_test.go 中的TestExport场景“export must write the service containers filesystem as a tar archive”执行的就是上面这条路径先up -d启动服务再执行docker compose export -o output service并以输出文件存在作为断言。多副本服务用 --index 指定要导出的副本服务通过deploy.replicas或 scale 出多个副本时用--index选择要导出的容器。仓库 e2e 测试 pkg/e2e/testdata/TestExportWithReplicas/compose.yaml 的示例配置services: service-with-replicas: image: alpine command: sleep infinity deploy: replicas: 3按 pkg/e2e/export_test.go 中TestExportWithReplicas的写法导出指定副本docker compose up -d service-with-replicas docker compose export -o r1.tar --index1 service-with-replicas docker compose export -o r2.tar --index2 service-with-replicas测试场景明确说明--index1写出第 1 个副本的文件系统、--index2写出第 2 个副本的文件系统。不指定--index默认0时不做副本编号过滤导出的是该服务排序后的第一个容器见 pkg/compose/containers.go 中getSpecifiedContainer的过滤与排序逻辑。验证导出结果文档给出的验证方式是 e2e 场景中的断言导出命令执行后-o指定的输出文件存在测试中的FileExists检查且文档将该输出描述为容器文件系统的 tar 归档。执行后可直接确认ls -l service.tar文件已生成即表示导出完成。由于归档是标准 tar 格式可用常规 tar 工具查看内容核对文件是否都在。错误信息速查以下错误字符串来自实现源码pkg/compose/containers.go、pkg/compose/export.go按现象对照即可定位原因错误信息触发条件service service is not running指定服务没有运行中的容器服务未up或已停止service service is not running container #2指定了--index但该编号对应的副本不存在output option is required when exporting to terminal在 TTY 终端中执行且未带-o边界说明export的目标是容器的文件系统快照导出的归档不包含 compose 配置本身恢复路径需要你自己基于 tar 归档操作项目文档未提供import之类的配套命令。命令不支持对已停止的容器导出若容器已停止先按第 1 节把服务重新拉起再执行导出。参数默认值与选项定义以 docs/reference/docker_compose_export.yaml 为准。【免费下载链接】composeDefine and run multi-container applications with Docker项目地址: https://gitcode.com/GitHub_Trending/compose/compose创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价