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の価値のある使い方などあるのだろうか?
ディスカッション
コメント一覧
まだ、コメントがありません