Closed3

docker-composeで環境変数が読み込まれない?

rhenerhene

下記構成で、${workspace} ディレクトリ上で以下のコマンドを実行すると .env ファイルの内容が環境変数に展開されない。

docker-compose -f .Docker/docker-compose.yml up --build -d

ディレクトリ構成
${workspace}
├ .Docker
│ ├ .env
│ ├ docker-compose.yml
│ └ Dockerfile
└ ...
docker-compose.yml
version: '3'
services:
  db:
    env_file: ./.env
    build: .
    volumes:
      - ./pgdata_store:/var/lib/postgresql/data
    restart: always
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASSWORD}

.envDockerfile の内容には依存しないようなので省略。

ちなみに .Docker ディレクトリに移動してから実行すると、正常に動作する。

cd .Docker & docker-compose -f docker-compose.yml up -d

また、 env_file に存在しないファイルを指定すると下記エラーになるので、 .env ファイルの存在は認識してるっぽい…

env_fileに存在しないファイルを指定した場合
ERROR: Couldn't find env file: ${workspace}/.Docker/.env_foo
rhenerhene

下記コマンドのように --env-file オプションを指定することで、想定通りの動きをすることを確認。

docker-compose -f .Docker/docker-compose.yml --env-file .Docker/.env up --build -d

ちなみに docker-compose.yml 内の env_file で設定した環境変数は、コンテナ内では反映されていた。
上記のことから、以下の動きをするようだ。

  • env_file で設定した環境変数は、コンテナ内では反映される
  • しかしenv_file で設定した環境変数は、docker-compose.yml内では使えない
  • カレントディレクトリ上の .env ファイルはデフォルトで読み込まれる
  • .env ファイル内で設定した環境変数は、docker-compose.yml内でも使える
  • 異なる .env ファイルを使いたい場合は --env-file オプションを使う必要がある

結論:「env_file--env-file の役割は違う」

【↓ 参考 ↓】
https://docs.docker.com/compose/environment-variables/

Kotaro666Kotaro666

下記コマンドのように --env-file オプションを指定することで、想定通りの動きをすることを確認。

類似したディレクトリ構成でのプロジェクトを作っていたため、同じ問題に悩んでいたところ、上記の方法で解決できました。助かりました。

このスクラップは2021/04/04にクローズされました