पाठ 6 / 25

Environment Variables and YAML Anchors

Configure services without repeating yourself.

environment, env_file and x- extension fields

Pass configuration with environment (a map or list) or env_file (a file of KEY=VALUE lines). To share common settings, define them once in an extension field (a top-level key starting with x-) with a YAML anchor (&common-env) and merge it into services with <<: *common-env; keys listed after the merge override it. In the demo, web and api share TZ and LOG_LEVEL this way.

The resolved web environment, run

I ran this with Docker Compose v2.38.1 and jq in the demo "shop" project. docker compose config parses, interpolates, merges and validates the files without starting containers; the Docker daemon was not running, so nothing was started. The web service's environment combines the anchored common values (TZ and LOG_LEVEL, which defaults to info) with its own API_URL.

docker compose config --format json | jq -c ".services.web.environment"

Output:

{"API_URL":"http://api:3000","LOG_LEVEL":"info","TZ":"Asia/Kolkata"}

Keep secrets out of environment

Environment variables leak into logs and inspect output; use Compose secrets (files) for passwords and keys.

त्वरित जाँच: What does <<: *common-env do?

  • Creates a network
  • Deletes common variables
  • Starts a new service
  • Merges the mapping defined by the &common-env anchor into this mapping
Answer

Merges the mapping defined by the &common-env anchor into this mapping — Anchors avoid repetition.