今回はdocker-composeにおける環境変数の読み込まれる順番についてまとめた.

概要


docker-composeにおける環境変数の設定方法はいくつかあるものの,それらの順序を意識したことはない.たいていうまく行く方法を一つ覚えておけば問題ないが,そうはいってもこうした基本的なところが後々のつまづきの原因になることはよくある話なので今回は環境変数の読み込まれる順番について備忘録としてまとめた.

環境


  • Docker

今回の目的


docker-composeにおける環境変数の読み込まれる順番を理解する.

環境変数を設定する方法


公式ドキュメントによれば,docker-composeにおける環境変数の宣言には複数の方法がある.

  • シェル内にて環境変数を設定し,composeファイル内で読み込ませる
  • composeファイル内においてenvironmentキーを使って環境変数を設定/シェル内の環境変数の受け渡しをする
  • composeファイル内においてenv_file設定オプションを利用する
  • docker-compose run -eの実行時に環境変数を設定/シェル内の環境変数の受け渡しをする
  • .envファイルに環境変数を記述しcomposeファイル内において値を読み込む

さて,これらが単一で設定されていれば良いが,いくつか同時に設定された場合はどの順番で読み込まれるのだろうか.

環境変数の読み込まれる順番


composeファイル内のenvironmentenv_file, Dockerfile内のENVの場合は

  1. composeファイル内のenvironment
  2. composeファイル内のenv_file
  3. Dockerfile内のENV

の順番で読み込まれる.

composeファイル内にて設定される値は以下の順番で環境変数は読み込まれる.

  1. environmentenv_fileの中で設定した値
  2. シェル内にて設定される値
  3. .envファイル内にて設定される値

最後に


今回は環境変数の読み込み順番を備忘録としてまとめた.composeファイルにenvironmentキーとenv_file両方が指定されているようなカオスに遭遇することは少ないと思うが composeファイルによってenvironmentキーが使用されていたり,env_fileが使用されていたり,.envファイルが必要になったりというケースはよくあると思う. 遭遇した際にはこの基本を思い出したい.

参考URL