--- description: Declare default environment variables in a file keywords: fig, composition, compose, docker, orchestration, environment, env file title: Declare default environment variables in file --- Compose supports declaring environment variables in an environment file. ## Syntax The following syntax rules apply to environment files: - Each line represents a key-value pair. Values can optionally be quoted. - `VAR=VAL` -> `VAL` - `VAR="VAL"` -> `VAL` - `VAR='VAL'` -> `VAL` - Lines beginning with `#` are processed as comments and ignored. - Inline comments for unquoted values must be preceded with a space. - `VAR=VAL # comment` -> `VAL` - `VAR=VAL# not a comment` -> `VAL# not a comment` - Inline comments for quoted values must follow the closing quote. - `VAR="VAL # not a comment"` -> `VAL # not a comment` - `VAR="VAL" # comment` -> `VAL` - Blank lines are ignored. - Unquoted and double-quoted (`"`) values have [parameter expansion](#parameter-expansion) applied. - Single-quoted (`'`) values are used literally. - `VAR='$OTHER'` -> `$OTHER` - `VAR='${OTHER}'` -> `${OTHER}` - Quotes can be escaped with `\`. - `VAR='Let\'s go!'` -> `Let's go!` - `VAR="{\"hello\": \"json\"}"` -> `{"hello": "json"}` - Common shell escape sequences including `\n`, `\r`, `\t`, and `\\` are supported in double-quoted values. - `VAR="some\tvalue"` -> `some value` - `VAR='some\tvalue'` -> `some\tvalue` - `VAR=some\tvalue` -> `some\tvalue` ### Parameter Expansion Compose supports parameter expansion in environment files. Parameter expansion is applied for unquoted and double-quoted values. Both braced (`${VAR}`) and unbraced (`$VAR`) expressions are supported. For braced expressions, the following formats are supported: - Direct substitution - `${VAR}` -> value of `VAR` - Default value - `${VAR:-default}` -> value of `VAR` if set and non-empty, otherwise `default` - `${VAR-default}` -> value of `VAR` if set, otherwise `default` - Required value - `${VAR:?error}` -> value of `VAR` if set and non-empty, otherwise exit with error - `${VAR?error}` -> value of `VAR` if set, otherwise exit with error - Alternative value - `${VAR:+replacement}` -> `replacement` if `VAR` is set and non-empty, otherwise empty - `${VAR+replacement}` -> `replacement` if `VAR` is set, otherwise empty ## Precedence Environment variables from an environment file have lower precedence than those passed via the command-line or via the `environment` section in project YAML. Refer to [Environment Variables Precedence](./envvars-precedence.md) for details. ## Compose file and CLI variables The environment variables you define here are used for [variable substitution](compose-file/compose-file-v3.md#variable-substitution) in your Compose file, and can also be used to define the following [CLI variables](reference/envvars.md): - `COMPOSE_API_VERSION` - `COMPOSE_CONVERT_WINDOWS_PATHS` - `COMPOSE_FILE` - `COMPOSE_HTTP_TIMEOUT` - `COMPOSE_PROFILES` - `COMPOSE_PROJECT_NAME` - `COMPOSE_TLS_VERSION` - `DOCKER_CERT_PATH` - `DOCKER_HOST` - `DOCKER_TLS_VERIFY` > **Notes** > > * Values present in the environment at runtime always override those defined > inside the `.env` file. Similarly, values passed via command-line arguments > take precedence as well. > * Environment variables defined in the `.env` file are not automatically > visible inside containers. To set container-applicable environment variables, > follow the guidelines in the topic > [Environment variables in Compose](environment-variables.md), which > describes how to pass shell environment variables through to containers, > define environment variables in Compose files, and more. ## More Compose documentation - [User guide](index.md) - [Installing Compose](install/index.md) - [Getting Started](gettingstarted.md) - [Command line reference](reference/index.md) - [Compose file reference](compose-file/index.md) - [Sample apps with Compose](samples-for-compose.md)