插值
Compose 文件中的值可以通过变量设置,并在运行时进行插值。Compose 文件使用类似 Bash 的语法 ${VARIABLE}。支持 $VARIABLE 和 ${VARIABLE} 两种语法。
对于大括号表达式,支持以下格式:
- 直接替换
${VAR}->VAR的值
- 默认值
${VAR:-default}-> 如果VAR已设置且非空,则为其值,否则为default${VAR-default}-> 如果VAR已设置,则为其值,否则为default
- 必需值
${VAR:?error}-> 如果VAR已设置且非空,则为其值,否则退出并报错${VAR?error}-> 如果VAR已设置,则为其值,否则退出并报错
- 替代值
${VAR:+replacement}->replacement如果VAR已设置且非空,否则为空${VAR+replacement}->replacement如果VAR已设置,否则为空
插值也可以嵌套:
${VARIABLE:-${FOO}}${VARIABLE?$FOO}${VARIABLE:-${FOO:-default}}
Compose 不支持其他扩展的 shell 风格功能,例如 ${VARIABLE/foo/bar}。
Compose 处理任何跟在 $ 符号后的字符串,只要它构成一个有效的变量定义——要么是一个字母数字名称([_a-zA-Z][_a-zA-Z0-9]*),要么是一个以 ${ 开头的大括号字符串。在其他情况下,它将保持不变,不会尝试插入值。
当您的配置需要一个字面的美元符号时,您可以使用$$(双美元符号)。这也可以防止Compose插值,因此$$允许您引用不希望由Compose处理的环境变量。
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"如果Compose无法解析替换的变量且未定义默认值,它会显示警告并将变量替换为空字符串。
由于Compose文件中的任何值都可以通过变量替换进行插值,包括复杂元素的紧凑字符串表示法,因此在每个文件的基础上进行合并之前应用插值。
插值仅适用于YAML值,不适用于键。对于键实际上是任意用户定义字符串的少数地方,例如 labels 或 environment,必须使用替代的等号语法 才能应用插值。例如:
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"