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
内からは参照できません。
ということで、今回やりたいこととはマッチしません。そもそもの目的が異なる、ということですね。
過去の先人達のように自分も嵌まったのでこのことも併せてメモしておきます。