开发实战指南

Docker Compose 变量:插值与容器环境不同

区分 YAML 解析、Compose 插值与真正传入容器的环境变量。

Nav Tools ·

分开三个处理层

YAML 定义文档结构,Compose 再按规则解析插值并配置容器环境。

YAML 接受 ${PORT} 字符串不证明 Compose 可以解析或取得该变量。

services:
  app:
    image: demo:${TAG:-latest}
    environment:
      PORT: "${PORT:-8080}"

明确默认与必需形式

Compose 支持默认值与必需值表达式,未设置和空值的处理依赖具体操作符。

带冒号的默认形式在未设置或为空时取默认,不带冒号则对空值有不同处理。

${VAR:-default} → default if unset or empty
${VAR-default}  → default if unset
${VAR:?message} → error if unset or empty

插值来源不会自动进入容器

项目 .env 可供 Compose 插值,但不会自动把所有条目传入容器。

按需使用 environment 或 env_file 配置容器,双美元符号可保留美元符号用于后续处理。

command: "echo $HOSTNAME"
Compose leaves $HOSTNAME for the container-side command.

用真实 Compose 环境验收

本站转换和检查配置文本,不执行完整本地 Compose 环境及优先级链。

在目标环境运行 docker compose config 检查最终配置,共享样例保持合成,不公开展开后的秘密。

参考资料

← 开发实战指南