Docker-composeにおける.envファイルの無意味さ

Docker-compose用の環境設定ファイルとして.envファイルというものがあるのだが、このファイルは利用価値があるのだろうか。はなはだ疑問なことに気がついた。

※何か誤解しているかもしれないので、気づいた方は連絡してほしい。

.envファイルの用途

.envファイルの使い方としてはこうだ。docker-compose.ymlと同じフォルダ内において、「環境変数」を設定しておくと、それでdocker-compose.yml中に指定された環境変数を展開してくれるのだろという。例えばこうだ。

.env

ADDRESS=123.123.123.123

docker-compose.yml

port:
  - ${ADDRESS}:100:100

これが、以下のように展開される。

port:
  - 123.123.123.123:100:100

しかし、これに意味があるだろうか?.envファイルは、docker-compose.ymlと同じフォルダになくてはならず、名称は.envでなければならないのである。「複数の異なるdocker-compose.ymlにわたる共通設定」を書けるような仕様にはなっていない。docker-compose.ymlと同じ場所になければならないのであれば、こんな隠しファイルではなく、docker-compose.ymlに直接書いた方が明瞭だろう。

env_file指定

docker-compose.ymlには、env_file指定というものもあり、ここでは好きなファイル名を指定できる。しかし、このファイルは、.envとは全く仕様が異なるのである。なぜこんなことになっているのか、設計者の頭を疑う位なのだが、このenv_fileに何を書いてもdocker-compose.ymlの変数展開には反映しない。

この環境変数は、コンテナ実行にしか反映しないのである。つまり、

  • .env:docker-compose.ymlの変数展開に反映する(コンテナにも受け渡されるかもしれないが確認してない)
  • env_file:docker-compose.ymlの変数展開に反映しない。コンテナ内でのみ使用できる。

唯一.envファイルに利用価値のある使い方

しかし、.envファイルの唯一の使いみちを思いついた。シンボリックリンクを使えば良いのである。例えば、

/somewhere/env.file

ADDRESS=123.123.123.123

としておき、次のように、それぞれのdocker-compose.ymlのあるフォルダにリンクしてしまうことだ。

ln -s /somewhere/env.file /container_a/.env
ln -s /somewhere/env.file / container_b/.env

これ以外に.envの価値のある使い方などあるのだろうか?

未分類

Posted by ysugimura