dockerに外部から環境変数を渡す方法

通常のプログラムのようにコンテナを使いたい場合,外部からの入力に応じて,その振る舞いを変えたいことがある。 一般に,通常プログラム(プロセスで)を実行するときは,引数を使って外部からの入力を渡すことができる。 では,コンテナ内に収めたプログラムに外部からパラメータを渡すにはどうしたらよいのか。

結論としては,環境変数を設定して渡すのが,この答え(の一つ)のよう。

Dockerfileをこんな感じで書いて

FROM ubuntu:latest

CMD echo $ENV1 $ENV2

以下を実行すると、

docker build -t container-name .
docker run --rm -t -e ENV1=hello -e ENV2=world container-name

以下の結果が得られる。

hello world

また、環境変数は初期値を設定しておくこともできる。

FROM ubuntu:latest

ENV ENV1 hello
ENV ENV2 world

CMD echo $ENV1 $ENV2

これを実行しなおすと、

docker build -t container-name .
docker run --rm -t container-name

同じ結果が得られる。

hello world

docker runはもちろんだが,docker-composeやAzure Container Instancesなどでも環境変数が渡せたので、 ローカル環境なら、docker-compose.ymlに環境変数指定するのが楽かな。