EasyBot

EASYBOT GUIDE

Node.js EADDRINUSEの原因とポート使用中エラーの解決方法

Node.jsでEADDRINUSE address already in useが出た時に、重複プロセス、ポート設定、二重起動を確認する方法を説明します。

EADDRINUSEは、Node.jsアプリが待ち受けようとしたポートを別プロセスが既に使っている時に発生します。同じBotを二重起動した場合や、開発サーバーが残っている場合によく起こります。

ポートを使っているプロセス

まずエラーに表示されたポート番号とプロトコルを確認します。開発環境ではポートを使うプロセスを調べ、必要ならそのプロセスだけ停止します。

  • エラー本文からポート番号を確認する
  • Windowsはnetstat、Linuxはssで待受を調べる
  • 停止するPIDとアプリ名を照合する

二重起動を確認

プロセスマネージャーやDockerで同じBotが複数起動していると競合します。起動ボタンの連打、restart設定、複数レプリカなどを調べます。

  1. 同名のプロセスやコンテナが複数ないか確認する
  2. 起動処理が失敗時に古い子プロセスを残していないか見る
  3. 管理画面から一つだけ起動する

環境変数のポート

ホスティング環境ではPORT環境変数で割り当てられた値を使う必要があります。アプリ側で固定ポートを設定すると、他のBotやサービスと重なる場合があります。

  • process.env.PORTを優先して待ち受ける
  • 0.0.0.0で外部接続を受け付ける必要があるか確認する
  • 公開ポート設定とアプリ内部ポートを一致させる

安全な復旧

原因が分からないまま全プロセスを終了したり、OSの予約ポートを変更したりしないでください。ログを保存し、対象アプリだけを再起動して確認します。

  • 設定変更前に現在のプロセス一覧を保存する
  • 対象サービスだけを停止・再起動する
  • 再起動後に待受ポートとヘルスチェックを確認する