首页/云/Docker 容器速查/compose 文件顶层结构
Compose 编排55 条

compose 文件顶层结构

一份 compose.yaml 通常包含 services、networks、volumes 三个顶层节:定义服务、声明网络与具名卷,再按需加 secrets、configs、include。

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

编排文件结构

一份编排文件用 YAML 描述整套环境:顶层声明有哪些服务、用到哪些网络与卷,服务段里再写镜像或构建方式、端口、挂载、变量与依赖。它既是部署依据也是文档,新成员读一遍就能理解系统结构。语法校验命令可以在拉起前发现绝大多数书写错误。

基本信息

顶层节服务、网络、卷,按需再加密钥与配置对象
服务段常用字段镜像或构建、端口、挂载、环境变量、依赖关系、重启策略
变量替换支持从环境读取变量填充文件内容
校验方式用配置校验子命令解析并输出最终生效的内容
缩进约定统一使用两个空格,制表符会直接报错

典型使用场景

  • 本地开发:一条命令起全套依赖,开发者不必手工装数据库与缓存
  • 测试环境部署:把整套关系固化,换机器也能得到一致环境
  • 环境差异化:用变量文件区分开发、测试、生产,文件主体共用
  • 多服务构建:在服务里声明构建方式与上下文,统一构建整套镜像
  • 交付与评审:编排文件进版本库,变更可评审可回溯

结构与缩进示例

结构与缩进示例
services:
  web:
    image: nginx:1.27-alpine
    ports:
      - "8080:80"
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - dbdata:/var/lib/postgresql/data

volumes:
  dbdata:

networks:
  default:
    driver: bridge

常见书写错误

错误表现处理
缩进不一致解析报错,指向的行号未必准确统一两个空格并逐层核对
用了制表符直接报错无法解析替换为空格
同层出现重复键后一个覆盖前一个且不报错靠校验命令发现,人工核对服务定义
键名拼写错误该字段被忽略,容器按默认行为运行与参考文档核对字段名
变量未定义替换结果为空,配置悄悄变形给变量提供默认值或先确认变量已设置

组织文件的建议

  • 服务按角色分组书写,数据库、缓存、应用、网关依次排列,便于阅读
  • 公共配置用锚点或片段复用,减少重复字段带来的不一致
  • 环境差异集中到变量文件,主文件保持稳定
  • 密钥与口令不写进主文件,用变量或专用密钥对象承载
  • 文件顶部写清用途与最近变更,交接时成本更低
解析不报错不代表字段有效:拼错的字段会被直接忽略,容器按默认值运行。改完文件后用校验命令看最终解析结果,比只看文件内容可靠。
同一层级的重复键不会报错,后写的会静默覆盖前面。服务定义较长时,用校验命令输出的最终结果做一次通读,能发现这类隐患。

易错点

  • 缩进或制表符导致解析失败,报错行号未必指向真正的位置
  • 同层重复键静默覆盖,端口或挂载配置悄悄变成另一个值
  • 字段名拼写错误被忽略,容器没有按预期限制资源或设置重启策略
  • 变量没定义导致替换成空值,配置变形后问题在运行期才暴露

数据来源与参考

  • Docker 官方文档:Compose 文件参考(docs.docker.com/compose/compose-file)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌