LoginSignup
31
23

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-02

はじめに

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

31
23
1

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
31
23