docker composeでホストの環境変数を引き継ぎたい

docker-compose.ymlをバージョン管理していてパスワードやトークンなどの機密情報をコンテナに渡したい場合、 docker-compose.ymlに直接書くのを避けたい。

アプリ開発などでは環境変数を参照するようにして、バージョン管理されているファイルには機密情報を書かないようにする。
これと同様にdocker-compose.ymlに直接書かず、ホストの環境変数を参照するようにしたい。

環境変数をコンテナに引き継ぐ

docker-compose.ymlenvironmentに環境変数名だけ書くと、ホストの環境変数をコンテナに引き継げる。

services:
  linux:
    image: debian:bullseye-slim
    command: tail -f /dev/null
    environment:
      - FOO
      - BAR

上記ではホストの環境変数FOOBARをコンテナに引き継ぐ。

動作確認

例えば以下のようにFOOBARを設定しておく。

$ export FOO=foo
$ export BAR=bar

この状態でコンテナを起動する。

$ docker-compose up -d

コンテナ内に入って環境変数を確認する。

$ docker-compose exec linux env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=70a7a67d6c61
TERM=xterm
FOO=foo
BAR=bar
HOME=/root

環境変数FOOBARがコンテナ内に引き継がれていることを確認できる。