やったこと
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
を利用する必要がありそうです。