※ この記事にはアフィリエイトリンクが含まれます
Linuxで「address already in use」というエラーで困っていませんか?
・サーバーが立ち上がらない
・同じポートに別のプロセスがいる気がする
・どうやって調べて止めればいいかわからない
「結論から言うと、使われているポートを確認して、不要なプロセスを止めるのが基本です」
- ポートを確認するコマンドを使う
- 該当プロセスのPIDを調べる
- 必要ならプロセスを終了する(または設定を変える)
この記事では、初心者向けに順を追って
Linuxでの原因の探し方と対処法をわかりやすく解説します。
Linux学習を始めると、「コマンドが多すぎて覚えられない…」「何から手をつければいいのかわからない…」と感じる方も多いと思います。
そんな方におすすめなのが『新しいLinuxの教科書 第2版』です。
実際のレビューでも、「初心者でも理解しやすい」「コマンドの丸暗記ではなく、仕組みから学べる」といった声が多く、Linux入門書として高く評価されています。特に、シェル・パイプライン・シェルスクリプト・Gitまで段階的に学べるため、「とりあえずコマンドを打つだけ」で終わらず、実務につながる知識が身につく構成になっています。
これからLinuxを学ぶ方や、インフラエンジニアを目指す方にとって、最初の1冊としてかなりおすすめできる本です。
address already in useとは
address already in useは、プログラムが使いたい
ネットワークの接続先(ポート)がすでに他で使われているときに出るメッセージです。
簡単に言うと、電話番号を自分で使いたいのに
すでに誰かが通話中の状態と似ています。
よくある実務のケース(具体例)
address already in use は、ローカル開発だけでなく、本番サーバーやDocker環境でも起きることがあります。
ポートの競合、プロセス確認、サービス停止、Dockerのポート割り当てまで見られると、開発だけでなく運用・保守の場面でも役に立ちます。
Linuxサーバーのトラブル対応経験がある方は、社内SE・情シス・自社内開発の求人でも評価される可能性があります。

ケース1:開発中のNode.jsやFlaskが起動しない
ローカルで開発中、よくあるのはポート8080や3000が使えないケースです。
例えば、前に起動したサーバーが落ちていないと
同じポートで新しく起動できません。
実務では急いで動作確認したいときにこのエラーで止まることが多いです。
ケース2:本番サーバーでポート80が使えない
本番サーバーでポート競合が起きた場合、単にプロセスを止めればよいわけではありません。
どのサービスが動いているのか、止めてよいプロセスなのか、影響範囲はどこまでかを確認する必要があります。
こうした慎重な切り分けができる人は、運用保守や社内SEの現場でも信頼されやすいです。
ケース3:Dockerコンテナのポート競合
Dockerでホストのポートをコンテナに割り当てるとき
既にホストで同じポートが使われているとエラーになります。
原因の調べ方(基本コマンド)
まずはどのプロセスがポートを使っているかを調べます。
以下のコマンドを順に試すと早く見つかります。
1) ssコマンド(推奨)
ssは新しいツールで、ネットワーク情報を表示します。
ss -ltnp | grep :8080-l はリッスン中、-t はTCP、-n は数字表示、-p はプロセス情報です。
2) netstatコマンド(古めだが使える)
古いLinuxだとnetstatを使います。
netstat -tulnp | grep :8080ここで出てくるPID/Program nameを見て誰が使っているかを確認します。
3) lsofコマンド(ファイルとして見つける)
lsofは開いているファイルを調べるツールです。ネットワークもファイル扱いです。
lsof -i :8080PIDを見つけたら、そのプロセスに対して適切な対応を行います。
対処方法(安全に進める手順)
見つけたPIDをすぐにkillする前に、何のプロセスか確認しましょう。
間違って重要なプロセスを止めるとサービス停止になります。
1) プロセスの詳細を確認する
psコマンドでプロセス名や親プロセスを確認します。
ps -p 12345 -o pid,ppid,cmdこれでどのプログラムかを判断できます。たとえば
cmdが/usr/bin/nodeなら開発中のNode.jsです。
2) 安全にプロセスを停止する(優しい方法)
まずは優しく終了を試みます。SIGTERMという”やさしい”終了信号です。
kill 12345これでプロセスが正常終了するか確認します。終了しない場合は次へ進みます。
3) 強制終了(最後の手段)
どうしても止まらないときは強制終了します。注意して使ってください。
kill -9 12345強制終了すると保存されていないデータが失われる場合があります。
実務でよくある応用例と対処例
例1:ローカル開発でポート3000が使えない場合
1. ターミナルでssやlsofでポート3000を調べます。
ss -ltnp | grep :3000
# または
lsof -i :30002. PIDがわかったらpsで何か確認します。
ps -p 23456 -o pid,cmd3. 開発中のプロセスならkillで止めて再起動します。
例2:本番でサービス同士が競合している場合
たとえばApacheとNginxが同じポートを設定していると競合します。
設定ファイルを確認して片方のポートを変えることが安全です。
# Nginxの設定例(/etc/nginx/sites-available/)
server {
listen 8080;
...
}サービスを止める前に再起動順や依存関係を確認しましょう。
例3:Dockerでホストポートが取れない場合
docker run -p 80:80 でエラーが出るとき
まずホストの80番を使っているプロセスを特定します。
ss -ltnp | grep :80
lsof -i :80その後、ホスト側のプロセスを止すか、別のポートにマッピングして回避します。
docker run -p 8080:80 myimage便利なコマンドとワンライナー
よく使うワンライナーを紹介します。初心者でも使いやすいです。
- 特定ポートを使うプロセスをすべて表示:
ss -ltnp | grep :PORT - PIDだけを抜き出して終了:
kill $(lsof -t -i :PORT) - 強制終了:
kill -9 $(lsof -t -i :PORT)
注意点と安全対策
本番サーバーで作業する前は必ずバックアップと
メンテナンス時間の確認を行ってください。
自動で再起動する仕組み(systemdや監視ツール)があると
止めてもすぐ復活してしまうことがあります。
その場合はサービスを正しく停止するか、監視を一時停止してください。
トラブルシューティングのチェックリスト
- どのポートでエラーが出ているかを確認する
ss/netstat/lsofでプロセスを見つけるpsでプロセスの中身を確認する- 必要ならまずは優しく
kill、その後強制kill - Dockerや自動起動サービスの設定も確認する
よくある質問(FAQ)
Q: PIDが見つからない場合は?
A: root権限が必要なことがあります。sudoを付けて再実行します。
sudo ss -ltnp | grep :8080
sudo lsof -i :8080Q: プロセスを止められない・すぐ復活する
A: systemdやsupervisorなどの監視サービスが起動を管理している可能性があります。
サービス名を特定してsystemctl stopやsupervisorctl stopを使います。
Linuxサーバーのポート競合やプロセス確認は、開発だけでなく運用・保守・社内SEの現場でもよく出てきます。
本番環境やDockerまわりのトラブル対応経験がある方は、インフラ寄りの社内SE・自社内開発求人でも評価される可能性があります。
自社内開発や運用改善に関わる働き方を目指すなら、経験者向けの転職サービスも確認しておくと判断しやすいです。

まとめ
address already in use は最初は驚くエラーですが
原因を順に調べれば初心者でも解決できます。
- まずポートを調べる(
ss,netstat,lsof) - PIDを確認してプロセスの中身を見る(
ps) - 安全に停止してから再度起動する(
kill→ 再起動)
実務ではDockerや自動起動の監視に注意するのがポイントです。
この記事の手順を試せば、多くのケースで問題を解決できます。
不安な場合は操作前に必ずバックアップや確認を行ってください。
コメント