插值
${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 對值進行插值,因此 $$
允許你引用你不希望 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"