Abirafdi Raditya Putra
Abirafdi Raditya Putra

Reputation: 997

docker-compose not recognizing env_file file/location, and still tries to use the default .env

Here's my compose file dev.yml

version: '2'

volumes:
  rethinkdb_data_dev: {}

services:
  rethinkdb:
    image: rethinkdb:latest
    volumes:
      - rethinkdb_data_dev:/home/rethinkdb_data

  rabbitmq:
    image: rabbitmq:latest

  fumio:
    build:
      context: .
      dockerfile: ./compose/fumio_dev/Dockerfile
    depends_on:
      - rethinkdb
      - rabbitmq
    links:
      - rethinkdb
      - rabbitmq
    env_file: ./compose/fumio_dev/dev.env
    environment:
      - GIRLFRIEND_FUMIO_CONFIG=development
      - GIRLFRIEND_FUMIO_NOSQLDATABASE_HOST=rethinkdb
    ports:
      - "${GIRLFRIEND_FUMIO_PORT}:8001"

The environment inside the dev.yml file is intentional, so I can override them inside with dev.env if needed.

My dev.env file, located inside compose/fumio_dev/ folder, relative to the dev.yml file.

GIRLFRIEND_FUMIO_PORT=8000

Here's what happens when I run docker-compose -f dev.yml build

enter image description here

If I provide .env file in the root folder, it runs fine, docker-compose ignores the env_file's value and try to use the default .env instead. So docker-compose env_file is somehow not working as intended or I'm missing something?

My docker-compose version is 1.8.0, I downgraded it to 1.7.1 but still no luck (installed using pip).

Upvotes: 16

Views: 14884

Answers (2)

lng
lng

Reputation: 84

As @dnephin has explained,

The env_file: field is for setting the default environment for a container. Values set in this can be used in the container, but not in the Compose file.

And one more thing I'd like to notice is that the --env-file flag that you can specify when executing the command, e.g. docker-compose --env-file ./somefile, and the env_file option in the compose file are absolutely different, too.

The --env-file flag enables you to determine a custom environment file that can be used in your Compose file.

So in your case, I think this command will do the trick:

docker-compose --env-file ./compose/fumio_dev/dev.env -f dev.yml build

Upvotes: 6

dnephin
dnephin

Reputation: 28060

The .env file in the project root, and the env_file: field in the Compose file are two different concepts.

The .env is for settings a default environment for Compose. Values set in this file can be used within the Compose file.

The env_file: field is for setting the default environment for a container. Values set in this can be used in the container, but not in the Compose file.

See https://docs.docker.com/compose/env-file/ for more information.

Upvotes: 60

Related Questions