Bruno Massa
Bruno Massa

Reputation: 125

How to pass .env variables from docker-compose to entrypoint's script?

How can I make the bash script to see env variables set on .env and/or inside docker-compose yaml?

.env

VARIABLE_ENV=VALUE_ENV

docker-compose.yml

version: '3'

services:
  service:
    volumes:
      - ./entrypoint.sh:/entrypoint.sh
    environment:
      - VARIABLE_YML=VALUE_YML
    entrypoint: /entrypoint.sh

entrypoint.sh

#!/bin/bash

echo -e "${VARIABLE_ENV}"
echo -e "${VARIABLE_YML}"

Upvotes: 2

Views: 2179

Answers (1)

David Maze
David Maze

Reputation: 159910

The .env file sets variables that are visible to Compose, in the same way as if you had exported them in your containing shell, but it doesn't automatically set those in containers. You can either tell Compose to pass through specific variables:

environment:
  - VARIABLE_YML=VALUE_YML # explicitly set
  - VARIABLE_ENV           # from host environment or .env file

Or to pass through everything that is set in the .env file:

environment:
  - VARIABLE_YML=VALUE_YML # as above
env_file: .env

The other important difference between these two forms is whether host environment variables or the .env file takes precedence. If you pass through a value in environment: then the host environment variable wins, but if it's in env_file:, .env is always used.

VARIABLE_ENV=foo docker-compose up

Upvotes: 5

Related Questions