environment variables not recognized in docker compose

Environment variables defined in docker-compose.yml are not set.

services:
  service1:
    image: alpine
    environment:
      - VAR1:H
      - VAR2:HI
    command:
      - /bin/sh
      - -c
      - |
        echo $VAR1
        echo $VAR2

This outputs:

$ docker compose up
WARN[0000] The "VAR1" variable is not set. Defaulting to a blank string.
WARN[0000] The "VAR2" variable is not set. Defaulting to a blank string.
[+] Running 1/0
 ⠿ Container compose-service1-1  Recreated                                                                                                                                                                              0.1s
Attaching to compose-service1-1
compose-service1-1  |
compose-service1-1  |
compose-service1-1 exited with code 0

Docker Compose version v2.12.0

>Solution :

Envrionment variables can be either passed with map syntax or array syntax, see:

# Array syntax
services:
  service1:
    image: alpine
    environment:
      - VAR1=H
      - VAR2=HI
    command:
      - /bin/sh
      - -c
      - |
        echo $$VAR1
        echo $$VAR2

Or,

# Map syntax
services:
  service1:
    image: alpine
    environment:
      VAR1: "H"
      VAR2: "HI"
    command:
      - /bin/sh
      - -c
      - |
        echo $$VAR1
        echo $$VAR2

Then, you have to use $$. As using echo $VAR1 makes docker-compose look for the variables from your host’s environment.

See:

Leave a Reply