插值
${VARIABLE}
。$VARIABLE
和 ${VARIABLE}
语法都受支持。对于带括号的表达式,支持以下格式
- 直接替换
${VAR}
->VAR
的值
- 默认值
${VAR:-default}
-> 如果VAR
已设置且非空,则为VAR
的值,否则为default
${VAR-default}
-> 如果VAR
已设置,则为VAR
的值,否则为default
- 必需值
${VAR:?error}
-> 如果VAR
已设置且非空,则为VAR
的值,否则以错误退出${VAR?error}
-> 如果VAR
已设置,则为VAR
的值,否则以错误退出
- 备用值
${VAR:+replacement}
-> 如果VAR
已设置且非空,则为replacement
,否则为空${VAR+replacement}
-> 如果VAR
已设置,则为replacement
,否则为空
插值也可以嵌套
${VARIABLE:-${FOO}}
${VARIABLE?$FOO}
${VARIABLE:-${FOO:-default}}
Compose 不支持其他扩展的 shell 风格功能,例如 ${VARIABLE/foo/bar}
。
如果你的配置需要一个字面上的美元符号,你可以使用 $$
(双美元符号)。 这也能防止 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"