EASYBOT GUIDE
Node.js EADDRINUSEの原因とポート使用中エラーの解決方法
Node.jsでEADDRINUSE address already in useが出た時に、重複プロセス、ポート設定、二重起動を確認する方法を説明します。
EADDRINUSEは、Node.jsアプリが待ち受けようとしたポートを別プロセスが既に使っている時に発生します。同じBotを二重起動した場合や、開発サーバーが残っている場合によく起こります。
ポートを使っているプロセス
まずエラーに表示されたポート番号とプロトコルを確認します。開発環境ではポートを使うプロセスを調べ、必要ならそのプロセスだけ停止します。
- エラー本文からポート番号を確認する
- Windowsはnetstat、Linuxはssで待受を調べる
- 停止するPIDとアプリ名を照合する
二重起動を確認
プロセスマネージャーやDockerで同じBotが複数起動していると競合します。起動ボタンの連打、restart設定、複数レプリカなどを調べます。
- 同名のプロセスやコンテナが複数ないか確認する
- 起動処理が失敗時に古い子プロセスを残していないか見る
- 管理画面から一つだけ起動する
環境変数のポート
ホスティング環境ではPORT環境変数で割り当てられた値を使う必要があります。アプリ側で固定ポートを設定すると、他のBotやサービスと重なる場合があります。
- process.env.PORTを優先して待ち受ける
- 0.0.0.0で外部接続を受け付ける必要があるか確認する
- 公開ポート設定とアプリ内部ポートを一致させる
安全な復旧
原因が分からないまま全プロセスを終了したり、OSの予約ポートを変更したりしないでください。ログを保存し、対象アプリだけを再起動して確認します。
- 設定変更前に現在のプロセス一覧を保存する
- 対象サービスだけを停止・再起動する
- 再起動後に待受ポートとヘルスチェックを確認する