✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Compose Variable Interpolation

Compose Variable Interpolation allows dynamic configuration by injecting environment variables into Docker Compose files, enabling flexible and reusable service definitions

Compose variable interpolation is the process by which Compose substitutes variable references — written as ${VARIABLE_NAME} — within the Compose file itself, sourcing their values from the host's environment or a .env file located alongside the Compose file.

Basic Variable Substitution

A variable reference anywhere within the Compose file is replaced with the corresponding value before Compose actually processes the file's configuration.

services:
  api:
    image: myapi:${APP_VERSION}
export APP_VERSION=2.3.0
docker compose up -d

This results in Compose actually using myapi:2.3.0, with the substitution happening before the configuration is applied.

Using a .env File for Interpolation Values

Rather than relying on variables already set in the host's shell environment, a .env file in the same directory as the Compose file provides default values for interpolation automatically.

APP_VERSION=2.3.0
LOG_LEVEL=debug
services:
  api:
    image: myapi:${APP_VERSION}
    environment:
      - LOG_LEVEL=${LOG_LEVEL}

Why This Differs From the Env File Field on a Service

This .env file convention is distinct from a service's own env_file field — the .env file specifically supports interpolation within the Compose file's own structure, while env_file supplies environment variables directly to a service's runtime container.

services:
  api:
    env_file:
      - .env.api

Providing a Default Value for an Unset Variable

A default can be specified directly within the interpolation syntax, used if the referenced variable isn't otherwise set.

services:
  api:
    image: myapi:${APP_VERSION:-latest}

Why Compose Variable Interpolation Matters

This mechanism allows a single Compose file to flexibly adapt based on external values, supporting different versions, environments, or configurations without needing separate, duplicated Compose files for each variation.