Share

Xでシェア
LINEでシェア

複数のDockerのコンテナを環境変数によって設定する場合の問題点

こんにちは、Pythonエンジニア見習いです。今回は複数のDockerのコンテナを環境変数によって設定する場合の問題点について書きます。現在私は複数のマイクロサービスによって構成されているプロジェクトに携わっています。当初プロジェクトではそれぞれのマイクロサービスの設定を環境変数で一括管理していました。それによりさまざまな問題が発生したので、この設定方法をアンチパターンとしてみなさんに共有します。

環境変数による設定の何が問題なのか

容易に書き換わってしまう

環境変数には書き込み権限を設定することはできません。そのため、スクリプトの途中で書き換わってしまう可能性があり、実際に過去にShellshock、httpoxyなどの重大な脆弱性を生み出しています。

別のプロセスから環境変数をチェックすることが困難

環境変数はプロセスごとに読み込まれます。そのため、ユーザーが同一であったとしても同じ環境変数を共有しているとは限りません。ここで問題となるのが、Dockerのコンテナ上でサーバープロセスが動いている場合です。コンソールが使える状況であれば、echoで確認することは出来ますが、すでにプロセスが走っている場合、そのような手段がとれないため確認が難しくなります。

sshやsudoを使用した際に環境変数が引き継がれない

sshやsudoを使用した場合、元のユーザーで設定していた環境変数は引き継がれません。そのため、使用するときには環境変数を引き継ぐように明示的に設定しなければいけません。

結論

環境変数による設定は環境またはユーザーごとに設定するべきではない場合や容易に書き換わってほしくない場合には不適切です。ちなみに、現在ではファイル名が環境変数名でその値が環境変数の値になるように各環境変数ごとにファイルを作成し、それをコンテナにマウントしています。例えば、

EXAMPLE=foo

という値があったとすると、exampleというファイルの中に

foo

と書いて、cat等で読み込みます。

私たちのサービス

100万人の顧客一人ひとりと向き合えるAIマーケティング。

WordPressを、もっと快適に。もっと安全に。

採用の痛みからの解放。採用戦略から運用まで伴走します。

困ってることの正体、一緒に探します。

30分無料相談

オンライン

お気軽にオンラインでご相談ください。Webサイトやマーケティングのお悩みに対応します。

吉川 敦文

吉川 敦文

代表

高橋 文樹

高橋 文樹

CTO

ギブス

ギブス

Wizard 責任者

池田 秀貴

池田 秀貴

Webディレクター

お問い合わせ

ご質問やお見積もりのご依頼など、お気軽にお問い合わせください。