Skip to content

[BUG] Interpolated environment variables are not overridden #12655

@hashJoe

Description

@hashJoe

Description

Docker Compose interpolates variables only once, at the time it loads each environment file. If a variable is overridden later, the interpolated value does not get updated — leading to stale values.

Is this an expected behavior or an issue?

Steps To Reproduce

Given these two environment files:

  • .envs/local/postgres:
DB_USER=my_user
POSTGRES_USER="${DB_USER}"
  • .envs/staging/postgres:
DB_USER=my_user_overridden
POSTGRES_USER="${DB_USER}"

and the following docker compose files:

  • docker-compose.local.yml:
services:
  postgres:
    image: pgvector/pgvector:0.7.4-pg14
    env_file:
      - .envs/local/postgres
  • docker-compose.staging.yml:
services:
  postgres:
    env_file:
      - .envs/staging/postgres

Running:

docker compose -f docker-compose.local.yml -f docker-compose.staging.yml run postgres env | grep USER

yields:

DB_USER=my_user_overridden
POSTGRES_USER=my_user

I expected:

DB_USER=my_user_overridden
POSTGRES_USER=my_user_overridden

Compose Version

Docker Compose version v2.34.0

Docker Environment


Anything else?

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions