2023年12月10日日曜日

Dockerのdebian-slimイメージでwait-forを使う時の注意

 恒例のドジなハマりシリーズです。相変わらずこういうハマり方をしています。

Dockerでウェブサービスとかを開発するとき、DBサーバーなどの依存サービスが立ち上がるまでアプリケーションサーバーをwait-forなどで待機、という使い方をすることがあると思います。そこで無駄にハマったのでメモしておきます。

症状

アプリケーションサーバーはdebian-slimイメージをベースに構築し、DBサーバーはMariaDBイメージを使っています。

アプリケーションサーバーはDBサーバーに依存しているので、docker-entrypoint.shwait-forスクリプトを呼び出し、3306ポートを待機しています。

すると、DBサーバーが起動しているにも関わらず、wait-forはその起動を検知できずタイムアウトしてしまいました。

原因

  • wait-forスクリプトではncコマンド(netcat)を使っている
  • debian-slimイメージにはnetcatが入っていない

あとはわかるな?

なかなか原因が掴めなかった理由は3つ。

1つ目は、使っていたwait-forのコードは初期のもので、ncコマンドが入っていなくてもエラーを出さずにそのまま処理を継続(その結果タイムアウト)していたこと。

2つ目は、それまではアプリケーションサーバーがalpineイメージをベースに作っていて、Alpine LinuxではBusyBoxベースのncコマンドがすでにインストールされていたこと。

3つ目は、ワイが単にドジだったこと

0 件のコメント:

コメントを投稿