Docker Compose に渡す環境変数ファイルを変更する

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.ymlenv_fileキー は何か。

version: '3.7'

services:
    db:
      env_file:
        - .dvelopment.env

最後の env_filedocker-compose.yml 内に記述できるパラメータで、これを使って環境変数のファイルを指定することができます。

ただし、このパラメータで指定した環境変数は、 起動したコンテナ内からは参照できますが、 docker-compose.yml 内からは参照できません

ということで、今回やりたいこととはマッチしません。そもそもの目的が異なる、ということですね。

過去の先人達のように自分も嵌まったのでこのことも併せてメモしておきます。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。