Docker Compose に渡す環境変数に .env 以外のファイルから渡したいと考えたのでメモしておきます。
経緯
アプリケーション開発環境等で開発環境用の .development.env と本番環境用の .production.env を用意したとして、この2つのどちらかから Docker Compose に環境変数を渡したい。
開発環境なのでアプリ側で使用する環境変数と Dockerコンテナ 内で使用する環境変数を統一したい、と。
ただし、デフォルトでは Docker Compose は .env からしか環境変数を読み取ってくれません。これをどうにかしたい。
コマンド
> docker-compose --env-file .development.env up -d
ということでコマンドですが、 docker-compose コマンドに --env-file でパラメータを渡してあげると .env 以外のファイルも環境変数のソースとして渡すことができます。
(余談) コマンド実行時の –env-file パラメータと .envファイル と docker-compose.yml の env_file キー
さて、ここから少しややこしい話を。
Docker Compose 周りでは環境変数関連で見出しに挙げた3つの方法があるようです。
.env については Docker Compose で使用できる環境変数ファイル。これは良いですね。
この .env をそれ以外のファイル名・ディレクトリのファイルから読み取るように変更できるのが docker-composeコマンド 実行時の --env-file パラメータ。
ここまでは docker-compose.yml 内で使用できる 環境変数です。
それでは最後、 docker-compose.yml の env_fileキー は何か。
version: '3.7'
services:
db:
env_file:
- .dvelopment.env
最後の env_file は docker-compose.yml 内に記述できるパラメータで、これを使って環境変数のファイルを指定することができます。
ただし、このパラメータで指定した環境変数は、 起動したコンテナ内からは参照できますが、 docker-compose.yml 内からは参照できません。
ということで、今回やりたいこととはマッチしません。そもそもの目的が異なる、ということですね。
過去の先人達のように自分も嵌まったのでこのことも併せてメモしておきます。