66 lines
2.5 KiB
Markdown
66 lines
2.5 KiB
Markdown
Your configuration options can contain environment variables. Compose uses the
|
|
variable values from the shell environment in which `docker-compose` is run. For
|
|
example, suppose the shell contains `POSTGRES_VERSION=9.3` and you supply this
|
|
configuration:
|
|
|
|
```yaml
|
|
db:
|
|
image: "postgres:${POSTGRES_VERSION}"
|
|
```
|
|
|
|
When you run `docker-compose up` with this configuration, Compose looks for the
|
|
`POSTGRES_VERSION` environment variable in the shell and substitutes its value
|
|
in. For this example, Compose resolves the `image` to `postgres:9.3` before
|
|
running the configuration.
|
|
|
|
If an environment variable is not set, Compose substitutes with an empty
|
|
string. In the example above, if `POSTGRES_VERSION` is not set, the value for
|
|
the `image` option is `postgres:`.
|
|
|
|
You can set default values for environment variables using a
|
|
[`.env` file](/compose/env-file/), which Compose automatically looks for. Values
|
|
set in the shell environment override those set in the `.env` file.
|
|
|
|
> Note when using docker stack deploy
|
|
>
|
|
> The `.env file` feature only works when you use the `docker-compose up` command
|
|
> and does not work with `docker stack deploy`.
|
|
{: .important }
|
|
|
|
Both `$VARIABLE` and `${VARIABLE}` syntax are supported. Additionally when using
|
|
the [2.1 file format](/compose/compose-file/compose-versioning/#version-21), it is possible to
|
|
provide inline default values using typical shell syntax:
|
|
|
|
- `${VARIABLE:-default}` evaluates to `default` if `VARIABLE` is unset or
|
|
empty in the environment.
|
|
- `${VARIABLE-default}` evaluates to `default` only if `VARIABLE` is unset
|
|
in the environment.
|
|
|
|
Similarly, the following syntax allows you to specify mandatory variables:
|
|
|
|
- `${VARIABLE:?err}` exits with an error message containing `err` if
|
|
`VARIABLE` is unset or empty in the environment.
|
|
- `${VARIABLE?err}` exits with an error message containing `err` if
|
|
`VARIABLE` is unset in the environment.
|
|
|
|
Other extended shell-style features, such as `${VARIABLE/foo/bar}`, are not
|
|
supported.
|
|
|
|
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.
|
|
|
|
```yaml
|
|
web:
|
|
build: .
|
|
command: "$$VAR_NOT_INTERPOLATED_BY_COMPOSE"
|
|
```
|
|
|
|
If you forget and use a single dollar sign (`$`), Compose interprets the value
|
|
as an environment variable and warns you:
|
|
|
|
```
|
|
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.
|
|
```
|