docker-compose の環境変数を利用する
Docker docker-compose
Published: 2020-12-22

やったこと

docker-composeの環境変数を利用してみます。

下記についてそれぞれやってみます。

  • env_file
  • environment
  • 実行元の環境変数

確認環境

$ docker --version
Docker version 19.03.13, build 4484c46d9d
$ docker-compose --version
docker-compose version 1.27.4, build 40524192

調査

docker-compose.yml

version: '3'
services:
  db-master:
    build:
      context: .
    env_file:
      - 'hoge.env'
    environment:
      - MY_ENV=myenvvvv
      - MY_ENV2=${HOST_100}

Dockerfile

FROM mysql:5.6

RUN echo $HOST_100
RUN echo $MY_ENV
RUN echo $AAA

hoge.env

AAA=BBB

環境変数をセットしておきます。

$ export HOST_100=999
$ echo $HOST_100
999

build してみます

$ docker-compose build --no-cache
Building db-master
Step 1/4 : FROM mysql:5.6
 ---> e1b3da40572b
Step 2/4 : RUN echo $HOST_100
 ---> Running in c7db45ca58d6

Removing intermediate container c7db45ca58d6
 ---> 74658905ed5f
Step 3/4 : RUN echo $MY_ENV
 ---> Running in a408138f343d

Removing intermediate container a408138f343d
 ---> 82e40a1c4754
Step 4/4 : RUN echo $AAA
 ---> Running in 10a445796fc5

Removing intermediate container 10a445796fc5
 ---> 88636d9beb52

Successfully built 88636d9beb52
Successfully tagged mysql_db-master:latest

build の段階では変数は読めていないことが分かりました。

それではコンテナを起動して、変数を出力してみましょう。

$ docker-compose up -d
WARNING: Found orphan containers (mysql_db-slave_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Recreating mysql_db-master_1 ... done

$ docker-compose exec db-master bash
root@b01c6b0eecc9:/# echo $HOST_100

root@b01c6b0eecc9:/# echo $MY_ENV
myenvvvv
root@b01c6b0eecc9:/# echo $AAA
BBB
root@b01c6b0eecc9:/# echo $MY_ENV2
999

このことから、ホストOSの環境変数を渡すには、environment を利用する必要がありそうです。

参考