【Linux】ポートが競合した場合の調査方法
- POSTS
はじめに Docker でコンテナの起動時に以下のようなエラーが生じました。
docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint conflict-test (c73c99ba5cbaeac0c0ce83e5cfeffc0354d68843ed320c4bfcea37ad05f26bd1): failed to bind host port for 0.0.0.0:8080:172.17.0.2:8080/tcp: address already in use エラーメッセージを確認すると、ホスト側の8080ポートがすでに別のプロセスによって使用されているため、コンテナのポート割り当てに失敗していることが分かります。
今回は、どのプロセスが対象のポートを使用しているのかを調査し、ポート競合の原因を特定する方法について紹介します。
ポートの競合が発生する理由 同じIPアドレス・ポート番号の組み合わせを複数のプロセスが同時に待ち受けることはできません。
例) アプリケーションA が ホスト側8080番ポート を使用していると、Dookcer コンテナに ホスト側8080番ポート を割り当てることができません。
競合したポートの調査 調査対象ポートを使用しているプロセスの特定 lsof -i :8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3 2043035 john-doe 3u IPv4 10809101 0t0 TCP *:http-alt (LISTEN) プロセスID からプロセスの詳細を確認する ps -fp コマンドでプロセスの詳細を確認する。