插值
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}}
Compose 不支援其他擴展的 shell 風格功能,例如 ${VARIABLE/foo/bar}
。
Compose 會處理任何後跟 $
符號的字串,只要它能構成有效的變數定義 - 字母數字名稱 ([_a-zA-Z][_a-zA-Z0-9]*
) 或以 ${
開頭的大括號字串。在其他情況下,它會被保留而不嘗試插入值。
當您的設定需要字面上的錢字符號時,您可以使用 $$
(雙錢字符號)。這也可以防止 Compose 插入值,因此 $$
允許您參考不想被 Compose 處理的環境變數。
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
如果 Compose 無法解析替換的變數且未定義預設值,它會顯示警告並將變數替換為空字串。
由於 Compose 檔案中的任何值都可以使用變數替換進行插值,包括複雜元素的緊湊字串表示法,因此插值會在每個檔案的合併之前應用。
插值僅適用於 YAML 值,不適用於鍵。在少數鍵實際上是使用者自訂的任意字串的地方,例如標籤或環境,必須使用替代的等號語法才能應用插值。例如:
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"