插值


Compose 文件中的值可以通过变量设置并在运行时进行插值。Compose 文件使用类似 Bash 的语法 ${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}}

其他扩展的 shell 样式功能,例如 ${VARIABLE/foo/bar},Compose 不支持。

Compose 会处理任何后跟 $ 符号的字符串,只要它构成一个有效的变量定义——一个字母数字名称 ([_a-zA-Z][_a-zA-Z0-9]*) 或一个以 ${ 开头的带括号的字符串。在其他情况下,它将原样保留,不尝试插入值。

当您的配置需要文字美元符号时,可以使用 $$(双美元符号)。这也可以防止 Compose 插入值,因此 $$ 允许您引用您不希望由 Compose 处理的环境变量。

web:
  build: .
  command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"

如果 Compose 无法解析替换变量且未定义默认值,它将显示警告并将变量替换为空字符串。

由于 Compose 文件中的任何值都可以通过变量替换进行插值,包括复杂元素的紧凑字符串表示法,因此插值是在每个文件进行合并之前应用的。

插值仅适用于 YAML 值,不适用于键。对于少数键实际上是任意用户定义字符串的情况,例如labelsenvironment,必须使用替代的等号语法才能应用插值。例如:

services:
  foo:
    labels:
      "$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
services:
  foo:
    labels:
      - "$VAR_INTERPOLATED_BY_COMPOSE=BAR"
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.