Closed3
docker-composeで環境変数が読み込まれない?
下記構成で、${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}
.env
や Dockerfile
の内容には依存しないようなので省略。
ちなみに .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
下記コマンドのように --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
の役割は違う」
結論:「【↓ 参考 ↓】
下記コマンドのように --env-file オプションを指定することで、想定通りの動きをすることを確認。
類似したディレクトリ構成でのプロジェクトを作っていたため、同じ問題に悩んでいたところ、上記の方法で解決できました。助かりました。
このスクラップは2021/04/04にクローズされました