🐳
Dockerのcompose.ymlでenv_fileを定義しても読み込まれない
はじめに
env_file
の設定オプションで勘違いをしてハマってしまいましたので共有です。
経緯
最初は、.env
をルートディレクトリに置き、env_file
を-.env
と定義していました。
そして、APP_PORT
の環境変数を8888
で設定したところ、問題なくportが8888
で動作していました。
services:
app:
container_name: "app"
build:
context: .
dockerfile: Dockerfile
env_file:
- .env
ports:
- "${APP_PORT:-8000}:8000"
volumes:
- .:/app
restart: always
その後、.env
の配置をsecret/.env
に変更する必要がありました。
そのため、以下のようにenv_file
を- secrets/.env
と定義し直しました。
services:
app:
container_name: "app"
build:
context: .
dockerfile: Dockerfile
env_file:
- secrets/.env
ports:
- "${APP_PORT:-8000}:8000"
volumes:
- .:/app
restart: always
しかしportはデフォルトの8000のまま変わりません。
コンテナを再起動するなど、色々と試したのですが、上手く読み込まれませんでした、、。
結果
そもそも、env_file
で設定した環境変数はcompose.yml
には適用されないようです。
env_file
の環境変数は、コンテナに対してのみ適用されるとのこと。
もしルートディレクトリに.env
を配置した場合、その環境変数はcompose.yml
にも適用されるそう。
その場合、env_file
で-.env
と設定しなくとも自動で読み込まれるようです。
services:
app:
container_name: "app"
build:
context: .
dockerfile: Dockerfile
ports:
- "${APP_PORT:-8000}:8000"
volumes:
- .:/app
restart: always
Discussion