插值


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 值,而不适用于键。对于键实际上是任意的少数几个地方 用户定义的字符串(如 labelsenvironment)另一种等号语法 必须用于应用插值。例如:

services:
  foo:
    labels:
      "$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
services:
  foo:
    labels:
      - "$VAR_INTERPOLATED_BY_COMPOSE=BAR"

APP信息