はじめに
今回は、「.envファイル で指定した環境変数」を、
docker-compose に読み込ませる時の Tips をまとめてみました。
対象
- docker-compose をよく使う人
- 環境変数の管理に困っている人
- 共同開発者に環境変数指定方法を共有するためのドキュメントを毎回書いている人
Case1: 環境変数を必須入力にしたい
Composeの変数展開機能で入力忘れの場合にエラーを出せます。
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
- APP_KEY=${APP_KEY:?.env ファイルに APP_KEY を設定して下さい。}
起動時のエラーイメージ。
$ docker compose up -d
error while interpolating services.web.environment.[]: required variable APP_KEY is missing a value: .envファイルに APP_KEY を設定して下さい。
Case2. 環境変数の初期値を指定したい
指定がない場合、初期値を指定したいってケース結構ありますよね。
services:
web:
image: nginx:alpine
ports:
- "{$APP_PORT:-8080}:80"
volumes:
- ./html:/usr/share/nginx/html
環境変数の指定がない場合は、8080
が指定されます。
複数プロジェクトやってるエンジニアは意外と助かる感じかも。
マニアックですが...。
初期値指定で、:-
と -
の違いの違いがあります。
-
:-
:${VARIABLE:-default}
: 変数が未設定または空文字列の場合にデフォルト値を使用 -
-
:${VARIABLE-default}
: 変数が未設定の場合にのみデフォルト値を使用
Case3. ファイルをそのまま環境変数に読み込ませたい
(ご存じの方多そうですが)
services:
worker:
image: nginx:alpine
env_file:
- ./config/common.env
- ./config/company_a.env
volumes:
- ./html:/usr/share/nginx/html
番外編: 環境変数の読み込み順
-
docker compose run -e
やdocker compose up --environment
で直接指定した変数 - composeファイル内の environmentディレクティブ で定義した変数
- シェルでexportした環境変数
- env_fileディレクティブで指定したファイル内の変数
- Dockerfile内のENVで定義された変数
まとめ
自分へのメモ的な感じになりましたが、どなたかの助けになれば幸いです。
一応、今回のスニペットはアプリのソースコード不要で動作検証できますので気になった方は試してみて下さい。