插值法

Compose 文件中的值可以通过变量设置并在运行时进行插值。撰写文件使用类似 Bash 的语法${VARIABLE}

$VARIABLE和语法均受${VARIABLE}支持。可以使用典型的 shell 语法内联定义默认值:

  • ${VARIABLE:-default}评估环境中default是否未设置或为空。VARIABLE
  • ${VARIABLE-default}default仅当VARIABLE环境中未设置时才计算为。

同样,以下语法允许您指定强制变量:

  • ${VARIABLE:?err}退出并显示一条错误消息,其中包含errif VARIABLE未设置或环境中为空。
  • ${VARIABLE?err}err仅当 VARIABLE环境中未设置时退出并显示一条错误消息。

插值也可以嵌套:

  • ${VARIABLE:-${FOO}}
  • ${VARIABLE?$FOO}
  • ${VARIABLE:-${FOO:-default}}

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

$$当您的配置需要文字美元符号时,您可以使用(双美元符号)。这也可以防止 Compose 插入值,因此 a$$ 允许您引用您不希望由 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"