插值


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"