4
3

More than 3 years have passed since last update.

【docker-compose】env_fileとenvironmentの違い。環境変数適用の優先順位について

Posted at

個人用メモです。

env_fileとenvironmentはどちらもdocker-compose.ymlでrun時に環境変数を指定する

  • run(コンテナ作成)時のみ適用される。
  • build(イメージの作成)では使われない
    • build時に環境変数を指定したい場合は、build -> argsを使う。


env_fileとenvironmentの違い

・環境変数の読み込み方法と設定方法が違う

env_fileは環境変数が記載されたファイルを読み込む

environmentはdocker-compose.ymlに直接変数を記述する。

env_fileの例
env_file: 
  - .env
  - .env.prd
  - .env.local.aws
  - ./common.env
  - ./apps/web.env
environmentの例
environment:
  - NODE_ENV=development
  - PORT=80
  - MIGRATE=true
  - USER=${USER}
  - AWS_REGION=ap-northeast-1


・優先度が違う

それぞれで同じ環境変数を指定している場合、env_fileよりもenvironmentの設定の方が優先される。

env_fileで複数のファイル指定や、environmentで複数重複する変数の指定がある場合は、最後の方が優先される。

ホストに環境変数が設定されている場合は、その値が優先される。

・優先順位:
(1)ホスト > (2)environment > (3)env_file > (4)DockerfileのENV

ホストの環境変数が最優先なため、もしホストの環境変数が適用されてしまう場合は、docker側の環境変数名の変更が必要。


env_file

env_fileで指定するファイルパスはdocker-composeを実行したディレクトリが基準となる。

▼ファイルの指定方法

  1. ファイルが一つの場合 env_file: .env
  2. ファイルが複数の場合(1つでも可)
複数の場合
env_file:
  - .env
  - .env.prd
  - .env.local.aws
  - ./common.env
  - ./apps/web.env
1つの場合
env_file:
  - .env

▼ファイル名は複数の付け方がある

ファイル名 内容
.env デフォルトのファイル名
.env.local.aws 頭に .env がつく
common.env 後ろに .envがつく
./apps/web.env 下の階層のファイル
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3