Compose における環境変数

Compose の複数の場面において環境変数がさまざまに用いられています。 このページでは環境変数について必要となる情報を示します。

Compose ファイル内での環境変数の利用

シェル内にて環境変数を設定し、その値を Compose ファイルにおいて読み込ませることができます。

web:
  image: "webapp:${TAG}"

詳しくは Compose ファイルリファレンスの 変数の置換 の項を参照してください。

コンテナ内での環境変数の設定

サービスコンテナにおいて、たとえば docker run -e VARIABLE=VALUE ... のように environment キー を使って、環境変数を設定することができます。

web:
  environment:
    - DEBUG=1

コンテナへの環境変数の受け渡し

シェル内の環境変数を environment キー を使って、直接サービスコンテナに受け渡すことができます。この場合には値を渡すのではなく docker run -e 変数名 ... のようにできます。

web:
  environment:
    - DEBUG

コンテナ内の DEBUG 変数は、シェル内の DEBUG 変数の値が用いられます。 このシェルとは Compose が起動しているシェルのことです。

設定オプション env_file

外部ファイルから複数の環境変数をサービスコンテナー受け渡すには env_file オプション を利用することができます。 docker run --env-file=FILE ... のようにすることもできます。

web:
  env_file:
    - web-variables.env

docker-compose run 実行時の環境変数の設定

docker run -e と同じように、 docker-compose run -e の実行によるコンテナに対しても環境変数を設定することができます。

docker-compose run -e DEBUG=1 web python console.py

シェル変数を受け渡す際には、値は直接受け渡さずに以下のようにできます。

docker-compose run -e DEBUG web python console.py

コンテナ内の DEBUG 変数は、シェル内の DEBUG 変数の値が用いられます。 このシェルとは Compose が起動しているシェルのことです。

.env ファイル

Compose ファイルが参照する環境変数、あるいは Compose の設定に用いられる環境変数のデフォルト値を設定することができます。これは .env という 環境ファイル にて行います。

$ cat .env
TAG=v1.5

$ cat docker-compose.yml
version: '3'
services:
  web:
    image: "webapp:${TAG}"

docker-compose up を実行すると、上で定義されている web サービスは webapp:v1.5 というイメージを利用します。 このことは config コマンド を使って確認できます。 このコマンドは変数を置換した後のアプリケーション設定を端末画面に出力します。

$ docker-compose config
version: '3'
services:
  web:
    image: 'webapp:v1.5'

シェル内にて設定される値は、 .env ファイル内のものよりも優先されます。 たとえばシェル上において TAG を異なる値に設定していたら、それを使って変数置換された image が用いられることになります。

$ export TAG=v2.0
$ docker-compose config
version: '3'
services:
  web:
    image: 'webapp:v2.0'

environmentenv_file による設定ファイルの両方にて変数が指定されると、環境変数の値はまずは environment キーが優先して取得され、次に設定ファイルから取得することになり、その次に DockerfileENV エントリとなります。

$ cat ./Docker/api/api.env
NODE_ENV=test

$ cat docker-compose.yml
version: '3'
services:
  api:
    image: 'node:6-alpine'
    env_file:
     - ./Docker/api/api.env
    environment:
     - NODE_ENV=production

このことはたとえば NodeJS コンテナに対して以下のコマンドにより確認できます。

$ docker-compose exec api node
> process.env.NODE_ENV
'production'

Dockerfile ファイル内の ARGENV は、 environmentenv_file による Docker Compose の設定がある場合は評価されません。

NodeJS コンテナーの仕様: script:start に対して package.json のエントリを含む場合、たとえば NODE_ENV=test node server.js のような場合には、 docker-compose.yml ファイルでの設定よりもこちらの設定が優先されます。

環境変数を用いた Compose の設定

Docker Compose のコマンドラインからの処理設定を行うことができる環境変数がいくつかあります。 そういった変数は先頭が COMPOSE_DOCKER_ で始まります。 詳しくは CLI 環境変数 を参照してください。