Dockerで複数プロセス管理する場合でrun時に環境変数で設定指定する話

備忘録


仕事でDockerを使っていて

  • CMD ["app"]みたいな単一プロセスでコンテナを立ち上げるのではなくCMD ["/sbin/init"]みたいにしてsshdとか複数プロセスを立ちあげたい
  • DBの接続設定みたいな、本番環境とか開発環境とかの設定を切り替えたい
  • 環境ごとにイメージをビルドするのはナンセンス
  • ならdocker run時に-eオプションで環境変数で設定を指定しよう

というような状況があってウンウンやってたんですが、うまくアプリに環境変数が渡ってくれない。

具体的には/sbin/initがsupervisordを起動していて、supervisordがアプリのプロセスを管理しているという状況なんですが、Google先生に聞いてみても単一プロセスで使ってみた環境変数でいい感じに出来るよ*1と言う記事が多くて、複数プロセス立ち上げる場合run時に環境変数で設定注入するんどうしたらええんやーってなってたんですが、どうやらDocker云々と言うより/sbin/initの挙動っぽい。
Linux力ないので分からないですが、多分/sbin/initはなんかそう言う事前状況みたいなの無効化する力を持っているんだと思う。

結果的に、普通にCMD ["supervisord", "--nodaemon"]で動きました、という話でした。

*1:rails動かしてみたみたいな