🐳
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を使用して指定した環境変数は、Dockerコンテナの中だけで有効になります。
つまり、その環境変数はホストマシン(Dockerを実行しているマシン)には適用されません。
もしルートディレクトリに.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