コンテナに環境変数を渡す - docker-compose
docker-compose runの-eオプションで指定する
- docker-compose runは-eオプションで環境変数を指定できる
- -eオプションはDockerfileのENVより優先され、内容を上書きする
docker-compose.ymlのenvironmentで指定する
$ vi Dockerfile
FROM ubuntu
ENV "FOO" "foo1"
CMD echo DEBUG: $FOO
$ vi docker-compose.yml
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- FOO=foo3
$ docker-compose up --build
=> Building app ...
...
...
app_1 | DEBUG: foo3
- docker-compose.ymlのenvironmentで環境変数を指定できる
- environmentはDockerfileのENVより優先され、内容を上書きする
docker-compose.ymlのenv_fileで指定する
$ vi Dockerfile
-----------------------------
FROM ubuntu
ENV "FOO" "foo1"
CMD echo DEBUG: $FOO
-----------------------------
$ vi docker-compose.yml
-----------------------------
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
# environment:
# - FOO=foo3
env_file:
- test.env
-----------------------------
$ vi test.env
-----------------------------
FOO=foo4
-----------------------------
$ docker-compose up --build
=> Building app ...
...
...
app_1 | DEBUG: foo4
- docker-compose.ymlのenv_fileで環境変数を書いたファイルを指定できる
- environmentはDockerfileのENVより優先され、内容を上書きする
- env_fileとenvironmentが同時にあると、environmentが優先される
.envで指定する
$ vi Dockerfile
-----------------------------
FROM ubuntu
ENV "FOO" "foo1"
CMD echo DEBUG: $FOO
-----------------------------
$ vi docker-compose.yml
-----------------------------
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- FOO=${FOO}
# env_file:
# - test.env
-----------------------------
$ vi .env
-----------------------------
FOO=foo5
-----------------------------
$ docker-compose up --build
=> Building app ...
...
...
app_1 | DEBUG: foo5
- .envファイルはdocker-composeコマンドを実行するディレクトリに置く
- .envファイルに書いた環境変数をdocker-compose.ymlのenvironmentで指定する
- 上の例ではFOO=${FOO}として.envのFOOをenvironmentのFOOに渡している