🐳

Dockerのcompose.ymlでenv_fileを定義しても読み込まれない

2024/08/29に公開

はじめに

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