LoginSignup
183
147

More than 5 years have passed since last update.

案外知られてないdocker-composeの環境変数定義の記法

Last updated at Posted at 2019-03-03

docker-composeの変数と言われると、docker-compose自体に入れる変数と、その中のコンテナに対して入れる環境変数がありますね。
ここでは前者のほうに関してです。

知ってる人は知ってる書き方

コンテナの中に対して入れる環境変数のを外の.envファイルから読み取って値を入れてくれる方法です。(${DB_DATABASE}といった箇所です)
Laravelなどでは最初から.envが存在するのもあってその.envに合わせて名前を定義すると良いですね。

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/mysql
    ports:
      - "3306:3306"

実はデフォルト値が設定できる

実はこの定義方法にはデフォルト値が設定できる記法があって、たまたま他のdocker-composeを見てたら見つけてええやん!ってなりました。

  logstash:
    image: blacktop/logstash:${ELASTIC_VERSION:-6.6.1}
    ports:
      - "5044:5044"

基本的な書き方はこの-をつける書き方です。
ドキュメントにも書いてあります。→https://docs.docker.com/compose/compose-file/#variable-substitution

記述例 説明
${VARIABLE:-default} VARIABLEが未設定またはempty値の場合にdefaultを設定する
${VARIABLE-default} VARIABLEが未設定の場合にdefaultを設定する

また、エラーにする記法もあります。

記述例 説明
${VARIABLE:?err} VARIABLEが未設定またはempty値の場合にエラーメッセージを表示して終了する
${VARIABLE?err} VARIABLEが未設定の場合にエラーメッセージを表示して終了する

エラーで終了する記法は後者のほうが使われそうですね。

183
147
2

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
183
147