部署前把配置渲染出来
docker compose config 输出多文件、变量插值、override 合并之后的最终配置,同时完成语法与引用校验。改完 compose 先跑它,能在部署前发现 YAML 缩进、未定义变量、卷与网络引用缺失这类问题,避免带着一份半残配置上线——这类错误在运行期往往只表现为某个服务行为诡异,很难定位到配置文件本身。
基本信息
| 默认行为 | 输出合并后的完整配置,含变量替换后的实际取值 |
|---|---|
| --quiet | 只做校验不输出内容,适合作为 CI 门禁步骤 |
| --services | 只列服务名,供脚本批量操作使用 |
| --volumes / --profiles | 列出卷与可用 profile,确认待创建的资源 |
| --environment | 打印变量替换后的环境变量结果 |
| 多文件 | 用 -f 依次指定 compose 文件,顺序决定覆盖关系 |
典型使用场景
- 上线前自检:语法、引用、变量一次校验完,比启动后再排错成本低得多
- CI 门禁:--quiet 校验不通过直接中断流水线,不让坏配置合入
- 排查变量没生效:看渲染结果里的实际值,确认是变量未导出还是被 override 覆盖
- 多环境对照:渲染开发与生产两份结果做差异比对,确认只有预期项不同
- 部署留档:把渲染结果存成文件,作为本次上线的配置快照与回滚参照
常用命令
常用命令
docker compose config --quiet # CI 门禁:只校验,失败即中断
docker compose config | head -60 # 查看合并与插值后的最终配置
docker compose config --services # 只列服务名,供脚本循环
docker compose config --environment | head # 看变量替换后的结果
docker compose -f compose.yml -f compose.prod.yml config # 显式多文件合并
docker compose config > /tmp/final-compose.yml # 存档,便于比对与回滚能发现与不能发现
| 检查项 | 能否发现 | 说明 |
|---|---|---|
| YAML 语法与缩进 | 能 | 解析阶段直接报错并指出位置 |
| 未定义的变量插值 | 能 | 渲染为空值并给出警告,需留意 stderr 输出 |
| 卷与网络引用缺失 | 能 | 引用了未声明的资源会报错 |
| 镜像标签是否存在 | 不能 | 只处理文本,不向远端仓库查询 |
| 端口占用与容器内错误 | 不能 | 必须实际启动才能暴露 |
| 密钥与凭据是否有效 | 不能 | 只做替换,不校验有效性 |
config 的输出会把密钥明文渲染出来。终端回看、CI 日志归档、贴进工单与群聊都是实际存在的泄露路径,需要留存时先做遮蔽处理。
变量未定义时该工具默认渲染成空串而不是失败,服务会带着空配置启动(例如空的数据库地址)。关键变量建议用 ${VAR:?缺失说明} 形式声明,缺值时让配置校验直接失败。