插值
Compose 文件中的值可以通过变量设置并在运行时进行插值。Compose 文件使用类似 Bash 的语法${VARIABLE}。$VARIABLE 和 ${VARIABLE} 语法均受支持。
对于带大括号的表达式,支持以下格式:
- 直接替换
${VAR}->VAR的值
- 默认值
${VAR:-default}-> 如果已设置且非空,则为VAR的值,否则为default${VAR-default}-> 如果已设置,则为VAR的值,否则为default
- 必填值
${VAR:?error}-> 如果已设置且非空,则为VAR的值,否则以错误退出${VAR?error}-> 如果已设置,则为VAR的值,否则以错误退出
- 备选值
${VAR:+replacement}-> 如果VAR已设置且非空,则为replacement,否则为空${VAR+replacement}-> 如果VAR已设置,则为replacement,否则为空
插值也可以嵌套
${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 值,而不适用于键。对于少数情况下键实际上是任意用户定义的字符串的地方,例如标签或环境变量,必须使用替代的等号语法才能应用插值。例如:
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"