はじめに
docker-compose立ち上げたコンテナに、カスタムの環境変数ファイル(例: .my.env
)を使って環境変数を渡す時にハマったのでメモです。
やりたいこと
環境変数ファイル .my.env
の環境変数を docker-compose
で起動するコンテナに渡したい。
カスタム環境変数ファイル .my.env
例えば、カスタム環境変数ファイルとは次のようなものです。
ENV=develop
FOO=foo
成功例
先に「こうすればうまくいく」という例を示します。
env_file
と environment
を同時に指定したい場合は以下のようにやるとうまくいきます。
version: "3"
services:
my-service:
image: busybox
env_file:
- ./.my.env
environment:
- HOGE=hoge
command:
- 'env'
実行例(成功)
docker-compose up
...(略)
my-service_1 | ENV=develop
my-service_1 | FOO=foo
my-service_1 | HOGE=hoge
失敗例
enviroment
に、 .my.env
で定義した環境変数のキーだけ渡すと失敗します。
environment:
- HOGE=hoge
- FOO
実行例(失敗)
environment
で指定した FOO
が環境変数として読み込まれなくなっています。
docker-compose up
...(略)
my-service_1 | ENV=develop
my-service_1 | HOGE=hoge
原因
env_file
をしてもしなくても、 environment
にキーだけを書いた場合は、マシンの環境変数もしくは .env
ファイルの環境変数が呼ばれるようになります。
environment
に環境変数キーだけを設定した時にそれらがない場合は、未定義になってしまうようです。
ややこしい点
.env
ファイルを読み込む場合は、カスタムの環境変数と違ってキーだけの指定をすると .env
から読み取ってくれます。
結論
env_file
でカスタム環境変数を読み込むときは、 environment
のなかでキーだけの指定をしないようにしましょう。