Description
Description
When using .env
files with docker-compose
via the --env-file
flag, interpolated variables do not appear to resolve using values defined within the same file. Instead, interpolation seems to use variables from previously loaded .env
files.
Steps To Reproduce
1. In this environment
docker-compose version
Docker Compose version v2.36.1
2. With this config
docker-compose.yml
:
services:
test-service:
image: hello-world
environment:
HOSTNAME: ${ENV_HOSTNAME}
MY_URL: ${ENV_MY_URL}
.local.env
:
ENV_HOSTNAME=localhost
ENV_MY_URL="http://${ENV_HOSTNAME}"
.dev.env
:
ENV_HOSTNAME=dev.my-company.com
ENV_MY_URL="http://${ENV_HOSTNAME}"
3 Run
Run
docker-compose --env-file ./.local.env --env-file ./.dev.env config
According to the docs , the values in ./.dev.env
should override values in ./.local.env
.
See Error / Result
This is the output
$ docker-compose --env-file ./.local.env --env-file ./.dev.env config
name: podman-overrides-test
services:
test-service:
environment:
HOSTNAME: dev.my-company.com <----------- This is correct
MY_URL: http://localhost # <------------- This should be `http://dev.my-company.com`
image: hello-world
networks:
default: null
networks:
default:
name: podman-overrides-test_default
In the above case, test-service correctly getsHOSTNAME
from ENV_HOSTNAME
in ./.dev.env
. However it's MY_URL
is interpolated using the ENV_HOSTNAME
value from ./.local.env
, but I'd expect it to interpolate using the ENV_HOSTNAME
value in ./.dev.env
.
Compose Version
Docker Compose version v2.36.1
Docker Environment
Anything else?
This seems somewhat related #12655