動作させているプログラムを動作させている環境が Docker コンテナ内か判定する必要に遭遇しました。ちょっとしたバッチ処理でしたが Docker 環境に限り設定を追加する必要がありました。
どう対応していたか
Dockerfile や docker-compose で ENV DOCKER_ENV=1
のように環境変数を設定していました。動作するプログラム内で環境変数を判定し設定を調整すれば対応できます。
この方法だと環境変数の指定忘れが起これば対象のプログラムは動作しなくなってしまいます。その他の方法がないか調べてみました。
.dockerenv
を使った判定
Docker コンテナを立ち上げた場合, root に /.dockerenv
が生成されるようです。そこでこのファイルの存在判定で対応します。Ruby の場合であれば次のコードで判定することができます。
if File.exist?(File.join('/', '.dockerenv'))
# Docker コンテナ上でのみ実行する処理
end
参考: 今の環境がDocker Containerとして動作しているかどうかをコマンドで調べる
これによって面倒な環境変数の管理が不要になりました。