插值
Compose 文件中的值可以由变量设置,并在运行时进行插值。编写文件使用类似 Bash 的
语法${VARIABLE}
.双$VARIABLE
和${VARIABLE}
语法。
对于大括号表达式,支持以下格式:
- 直接替换
${VAR}
-> 值VAR
- 默认值
${VAR:-default}
-> 值VAR
如果已设置且非空,否则default
${VAR-default}
-> 值VAR
如果设置,否则default
- 必需的值
${VAR:?error}
-> 值VAR
如果 set 且非空,否则退出并显示错误${VAR?error}
-> 值VAR
如果设置,否则退出并显示错误
- 替代值
${VAR:+replacement}
->replacement
如果VAR
已设置且非空,否则为空${VAR+replacement}
->replacement
如果VAR
已设置,否则为空
插值也可以嵌套:
${VARIABLE:-${FOO}}
${VARIABLE?$FOO}
${VARIABLE:-${FOO:-default}}
其他扩展的 shell 样式功能,例如${VARIABLE/foo/bar}
,则不是
受 Compose 支持。
Compose 会处理符号后面的任何字符串,只要它使
有效的变量定义 - 字母数字名称 ($
[_a-zA-Z][_a-zA-Z0-9]*
)
或以 . 开头的大括号字符串在其他情况下,它将保留,而不尝试插入值。${
当您的配置需要 Literal 时,您可以使用 (双美元符号)
美元符号。这还会阻止 Compose 对值进行插值,因此 a 允许您引用不希望
组成。$$
$$
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"