pruning Compose file v2 reference updated Compose v1, v2, v3 files, still WIP added includes for compatibility matrix, fixed TOC menu new topic organziation Compose reference, split two 3 files plus versioning Daniel's comments, fixed links, added more to versioning details fixed volumes_from example per Daniel's comments for v1 simplified links to version references copyedits and improved/surfaced links to versioning/upgrade docs removed for version specific content re: volume_drivers from various files Signed-off-by: Victoria Bialas <victoria.bialas@docker.com>
2.3 KiB
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 EXTERNAL_PORT=8000 and you supply
this configuration:
web:
build: .
ports:
- "${EXTERNAL_PORT}:5000"
When you run docker-compose up with this configuration, Compose looks for
the EXTERNAL_PORT environment variable in the shell and substitutes its
value in. In this example, Compose resolves the port mapping to "8000:5000"
before creating the web container.
If an environment variable is not set, Compose substitutes with an empty
string. In the example above, if EXTERNAL_PORT is not set, the value for the
port mapping is :5000 (which is of course an invalid port mapping, and will
result in an error when attempting to create the container).
You can set default values for environment variables using a
.env file, which Compose will automatically look for. Values
set in the shell environment will override those set in the .env file.
$ unset EXTERNAL_PORT
$ echo "EXTERNAL_PORT=6000" > .env
$ docker-compose up # EXTERNAL_PORT will be 6000
$ export EXTERNAL_PORT=7000
$ docker-compose up # EXTERNAL_PORT will be 7000
Both $VARIABLE and ${VARIABLE} syntax are supported.
Additionally when using the 2.1 file format, it
is possible to provide inline default values using typical shell syntax:
${VARIABLE:-default}will evaluate todefaultifVARIABLEis unset or empty in the environment.${VARIABLE-default}will evaluate todefaultonly ifVARIABLEis 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.
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 will warn you:
The VAR_NOT_INTERPOLATED_BY_COMPOSE is not set. Substituting an empty string.