23
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

docker-composeでenv_fileとenvironmentを同時に設定する際の注意点

はじめに

docker-compose立ち上げたコンテナに、カスタムの環境変数ファイル(例: .my.env )を使って環境変数を渡す時にハマったのでメモです。

やりたいこと

環境変数ファイル .my.env の環境変数を docker-compose で起動するコンテナに渡したい。

カスタム環境変数ファイル .my.env

例えば、カスタム環境変数ファイルとは次のようなものです。

.my.env
ENV=develop
FOO=foo

成功例

先に「こうすればうまくいく」という例を示します。
env_fileenvironment を同時に指定したい場合は以下のようにやるとうまくいきます。

docker-compose.yml
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 で定義した環境変数のキーだけ渡すと失敗します。

docker-compose.ymlの抜粋
    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 のなかでキーだけの指定をしないようにしましょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
23
Help us understand the problem. What are the problem?