25
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker Compose】.envファイルの入力忘れ、エラー出したくないですか?

Posted at

はじめに

今回は、「.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

番外編: 環境変数の読み込み順

  1. docker compose run -edocker compose up --environment で直接指定した変数
  2. composeファイル内の environmentディレクティブ で定義した変数
  3. シェルでexportした環境変数
  4. env_fileディレクティブで指定したファイル内の変数
  5. Dockerfile内のENVで定義された変数

まとめ

自分へのメモ的な感じになりましたが、どなたかの助けになれば幸いです。

一応、今回のスニペットはアプリのソースコード不要で動作検証できますので気になった方は試してみて下さい。

25
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?