開発者向け
Macでポートが使用中
1つのTCPポートとアドレスで待ち受けられるプロセスは1つだけです。2つ目のサーバは「address already in use」で停止します。
症状
- 開発用サーバが「EADDRINUSE」または「address already in use」で停止する。
- 「port is already allocated」のため、Dockerがポートを公開できない。
- クラッシュやエディタの再起動の前は、そのポートは空いていた。
考えられる原因
- サーバの古いプロセス。以前に起動したサーバが、バックグラウンドで動き続けています。
- 別のアプリ。別のアプリが同じポートを使っています。macOS 12以降では、AirPlayレシーバーがポート5000と7000を使います。
- コンテナ。実行中のコンテナが、同じポートをMac上に公開しています。
確認方法
ポートを待ち受けているプロセスを見つけます。3000は使っているポートに置き換えてください。
lsof -nP -iTCP:3000 -sTCP:LISTEN出力 COMMAND列とPID列にプロセスが表示されます。
他のユーザのプロセスも見るには、同じコマンドをsudo付きで実行します。
sudo lsof -nP -iTCP:3000 -sTCP:LISTEN管理者パスワードが必要です。
プロセスの詳細を表示します。
ps -p 12345 -o pid,commandそのポートを公開しているコンテナを探します。
docker ps
解決方法
自分のプロセスであれば、そのターミナルウインドウでControl-Cを押して停止します。
そうでなければ、PIDを指定して終了シグナルを送ります。
kill 12345それでも停止しない場合は、
kill -9を使います。プロセスはデータを保存できません。macOSのプロセスであれば、停止しないでください。サーバには別のポートを選びます。
ポートが5000か7000の場合は、Macでポート5000や7000が使用中:AirPlayレシーバーを読んでください。
Kilobatを使う場合
1つのプロセスが開いているソケットを一覧表示します。
kilobat destinations --pid 12345PIDを指定してプロセスを終了します。停止しない場合にだけ
--forceを付けます。kilobat quit 12345
よくある質問
lsofに何も表示されないのに、ポートが使用中なのはなぜですか?
lsofには、調べる権限のあるプロセスしか表示されません。すべてのプロセスを見るには、sudo付きで実行します。
-nと-Pは何をしますか?
lsofがアドレスをホスト名に、ポートをサービス名に変換しないようにします。出力が速くなり、数値で表示されます。
出典
- lsof(8)、macOS 27.2に付属のmanページ
- kill(1)とps(1)、macOS 27.2に付属のmanページ
- Appleサポート:Appleソフトウェア製品で使われるTCPおよびUDPポート
出典は2026年10月29日に確認しました。manページはmacOSに付属のものです。「ターミナル」でman <name>を実行すると開けます。