個人用メモです。
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を実行したディレクトリが基準となる。
▼ファイルの指定方法
- ファイルが一つの場合
env_file: .env
- ファイルが複数の場合(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 | 下の階層のファイル |