2.1 KiB
| title | description | keywords |
|---|---|---|
| Interpolation | Learn about interpolation | compose, compose specification, interpolation, compose file reference |
{{< include "compose/interpolation.md" >}}
Default values can be defined inline using typical shell syntax:
${VARIABLE:-default}evaluates todefaultifVARIABLEis unset or empty in the environment.${VARIABLE-default}evaluates todefaultonly ifVARIABLEis unset in the environment.
Similarly, the following syntax allows you to specify mandatory variables:
${VARIABLE:?err}exits with an error message containingerrifVARIABLEis unset or empty in the environment.${VARIABLE?err}exits with an error message containingerronly ifVARIABLEis unset in the environment.
Interpolation can also be nested:
${VARIABLE:-${FOO}}${VARIABLE?$FOO}${VARIABLE:-${FOO:-default}}
Other extended shell-style features, such as ${VARIABLE/foo/bar}, are not
supported by Compose.
You can use a $$ (double-dollar sign) when your configuration needs a literal
dollar sign. This also prevents Compose from interpolating a value, so a $$
allows you to refer to environment variables that you don't want processed by
Compose.
web:
build: .
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
If Compose can't resolve a substituted variable and no default value is defined, it displays a warning and substitutes the variable with an empty string.
As any values in a Compose file can be interpolated with variable substitution, including compact string notation for complex elements, interpolation is applied before a merge on a per-file basis.
Interpolation applies only to YAML values, not to keys. For the few places where keys are actually arbitrary user-defined strings, such as labels or environment, an alternate equal sign syntax must be used for interpolation to apply. For example:
services:
foo:
labels:
"$VAR_NOT_INTERPOLATED_BY_COMPOSE": "BAR"
services:
foo:
labels:
- "$VAR_INTERPOLATED_BY_COMPOSE=BAR"