【Linux】address already in useエラーを解決する方法をわかりやすく解説

※ この記事にはアフィリエイトリンクが含まれます

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 :8080

PIDを見つけたら、そのプロセスに対して適切な対応を行います。

対処方法(安全に進める手順)

見つけた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. ターミナルでsslsofでポート3000を調べます。

ss -ltnp | grep :3000
# または
lsof -i :3000

2. PIDがわかったらpsで何か確認します。

ps -p 23456 -o pid,cmd

3. 開発中のプロセスなら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 :8080

Q: プロセスを止められない・すぐ復活する

A: systemdsupervisorなどの監視サービスが起動を管理している可能性があります。

サービス名を特定してsystemctl stopsupervisorctl stopを使います。

Linuxサーバーのポート競合やプロセス確認は、開発だけでなく運用・保守・社内SEの現場でもよく出てきます。

本番環境やDockerまわりのトラブル対応経験がある方は、インフラ寄りの社内SE・自社内開発求人でも評価される可能性があります。

自社内開発や運用改善に関わる働き方を目指すなら、経験者向けの転職サービスも確認しておくと判断しやすいです。

まとめ

address already in use は最初は驚くエラーですが

原因を順に調べれば初心者でも解決できます。

  • まずポートを調べる(ss, netstat, lsof
  • PIDを確認してプロセスの中身を見る(ps
  • 安全に停止してから再度起動する(kill → 再起動)

実務ではDockerや自動起動の監視に注意するのがポイントです。

この記事の手順を試せば、多くのケースで問題を解決できます。
不安な場合は操作前に必ずバックアップや確認を行ってください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

沖縄出身のエンジニアです。IT業界で5年以上の経験があり、主にC#やPHPを使って開発を行ってきました。新しい技術にも興味があり、日々学びながらスキルアップを目指しています。

コメント

コメントする

CAPTCHA


目次