「Port 8080 was already in use」「Address already in use」は、起動しようとしたプログラムが使うポートを、別のプロセスがすでに使っているときに出るエラーです。 直し方は次の3段です。

  1. どのプロセスが使っているかを調べる(Windows は netstat -ano、Mac・Linux は lsof -i :8080)
  2. 不要なプロセスなら止める(前回起動したままのアプリが多い)
  3. 止められないなら、自分のアプリのポートを変える

確認環境:Ubuntu 24.04、Python 3.11、Node.js 22、OpenJDK 21、Docker 29.4.3(確認日 2026年10月10日)。Spring Boot のメッセージは Spring Boot 4.1.1 のソースで、Windows のコマンドは Microsoft の公式ドキュメントで確認しています。Mac の lsof は Linux と同じ書き方で使えます。

エラー文の早見表

8080 番ポートを別のプロセスが使っている状態で、それぞれ起動しました。

起動したもの エラー文
Spring Boot Web server failed to start. Port 8080 was already in use.
Java(ServerSocket・Tomcat など) java.net.BindException: Address already in use
Node.js(Express など) Error: listen EADDRINUSE: address already in use 0.0.0.0:8080(IPv6 が使える環境では :::8080)
Python(Flask・Django・http.server) OSError: [Errno 98] Address already in use(Windows は [WinError 10048]、Mac は [Errno 48])
Docker(-p 8080:80) Bind for 0.0.0.0:8080 failed: port is already allocated、または failed to bind host port 0.0.0.0:8080/tcp: address already in use

どれも原因は同じです。直し方も同じ手順で進められます。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Port 8080 was already in useの直し方|OS別の手順」

Spring Boot では、次の形で表示されます(Action: に書かれていることが、この記事の手順1〜3です)。

***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 8080 was already in use.

Action:

Identify and stop the process that's listening on port 8080 or configure this application to listen on another port.

手順1:ポートを使っているプロセスを調べる

Windows

netstat -ano | findstr :8080
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       12345

一番右の数字がプロセスID(PID)です。-a は待ち受け中のポートも表示、-n は番号のまま表示、-o は PID を表示するオプションです。PID からプログラム名を調べます。

tasklist /FI "PID eq 12345"

PowerShell なら1行で調べられます。

Get-Process -Id (Get-NetTCPConnection -LocalPort 8080 -State Listen).OwningProcess

Mac・Linux

$ lsof -nP -iTCP:8080 -sTCP:LISTEN
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3 13559 root    3u  IPv4  33761      0t0  TCP *:8080 (LISTEN)

Linux では ss でも調べられます(-p でプロセス名を表示)。

$ ss -ltnp 'sport = :8080'
State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
LISTEN 0      5            0.0.0.0:8080      0.0.0.0:*    users:(("python3",pid=13559,fd=3))
OS 調べるコマンド ポイント
Windows netstat -ano | findstr :8080 右端が PID。tasklist /FI "PID eq PID" で名前
Windows(PowerShell) Get-NetTCPConnection -LocalPort 8080 -State Listen OwningProcess が PID
Mac lsof -nP -iTCP:8080 -sTCP:LISTEN 他のユーザーのプロセスは sudo を付けないと表示されない
Linux ss -ltnp 'sport = :8080' または lsof -i :8080 同上。fuser 8080/tcp は PID だけを表示

プロセス名が docker-proxy・com.docker なら、コンテナが使っている

Docker のコンテナを -p 8080:80 で起動していると、ホスト側では docker-proxy(Docker Desktop では com.docker.backend など)が 8080 番を使っているように見えます。

$ ss -ltnp 'sport = :8080'
LISTEN 0      4096         0.0.0.0:8080      0.0.0.0:*    users:(("docker-proxy",pid=13831,fd=9))

$ docker ps --format '{{.ID}} {{.Image}} {{.Ports}}'
da0191e5a808 tzdemo:1 0.0.0.0:8080->80/tcp

この場合は docker ps で、どのコンテナが 8080 番を公開しているかを調べます。

手順2:不要なプロセスを止める

OS 止め方
Windows taskkill /PID 12345 /F(/F は強制終了)
Windows(PowerShell) Stop-Process -Id 12345
Mac・Linux kill 12345(止まらなければ kill -9 12345)
Linux(ポート指定でまとめて) fuser -k 8080/tcp
Docker のコンテナ docker stop コンテナID(compose なら docker compose down)

止める前に、何のプロセスかを確かめます。 他の人が使っている検証サーバーや、OS・常駐ソフトのプロセスを止めると、別の問題が起きます。

よくある「使っているプロセス」

見つかったもの 理由 対処
java(自分のアプリ) 前回起動したアプリが止まっていない。IDE の停止ボタンを押さずに再実行した、ターミナルを閉じても裏で動いている IDE の実行中の一覧から止める、または上の方法で止める
node npm run dev を別のターミナルで起動したまま そのターミナルで Ctrl+C
docker-proxy・com.docker.backend コンテナがポートを公開している docker ps で確認して止める
Tomcat・Jenkins 8080 番を既定で使うソフトが常駐している 自分のアプリのポートを変える
Mac で 5000 番・7000 番 AirPlay レシーバーがこの2つのポートを使う(Flask の既定は 5000 番) Flask を別のポートで起動するか、「システム設定」の AirPlay レシーバーを切る

手順3:自分のアプリのポートを変える

止められないプロセスなら、自分のアプリを別のポートで起動します。

アプリ 変え方
Spring Boot application.properties に server.port=8081、起動時なら --server.port=8081、環境変数なら SERVER_PORT=8081
Spring Boot(テスト) server.port=0 で空いているポートを自動で選ぶ
Node.js(Express など) app.listen(process.env.PORT || 3000) と書いておき、PORT=3001 npm start
Vite vite --port 5174。使用中なら自動で次のポートを試す(strictPort: true にするとエラーで止まる)
Flask flask run --port 5001
Django python manage.py runserver 8001
Docker -p 8081:80 のように、左側(ホスト側)のポートだけを変える

Docker の -p ホスト側:コンテナ側 のうち、ぶつかっているのはホスト側です。コンテナの中のアプリの設定は変えずに、左側の番号だけを変えれば起動できます。

Docker で出る2種類のメッセージ

同じポートでも、何とぶつかっているかでメッセージが変わりました。

--- 別のコンテナが 8080 番を公開している
docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint ...: Bind for 0.0.0.0:8080 failed: port is already allocated

--- ホストのプロセス(Python など)が 8080 番を使っている
docker: Error response from daemon: failed to set up container networking: driver failed programming external connectivity on endpoint ...: failed to bind host port 0.0.0.0:8080/tcp: address already in use
メッセージ ぶつかっている相手 調べ方
port is already allocated 別のコンテナ docker ps(止まっているコンテナは docker ps -a)
address already in use ホストのプロセス 手順1のコマンド

Windows で使っていないのにポートが使えないとき

netstat に何も出ないのにポートが使えず、An attempt was made to access a socket in a way forbidden by its access permissions(アクセス許可で禁じられた方法でソケットにアクセスしようとしました)と出る場合は、Hyper-V や WSL2 がポートを予約していることがあります。予約されている範囲は次のコマンドで確認できます。

netsh interface ipv4 show excludedportrange protocol=tcp

一覧に入っているポートは避けて、別のポートを使います。

よくある質問

Q. アプリを止めたはずなのに、すぐに起動し直すとエラーになります。 A. 止める操作をしても、プロセスが終わるまで数秒かかることがあります。また、IDE で「停止」ではなくウィンドウを閉じただけだと、プロセスが残っていることがあります。手順1のコマンドで、まだ残っていないかを確認します。

Q. 毎回プロセスを探すのが手間です。 A. 開発中に毎回ぶつかるなら、アプリごとにポートを決めて設定ファイルに書いておくのが確実です。Spring Boot なら application-local.properties に server.port を書き、spring.profiles.active=local で起動します。

Q. 1024 番より小さいポート(80 番など)で起動すると、別のエラーになります。 A. Linux・Mac では、1024 番未満のポートは管理者権限が要ります。Permission denied になる場合はこのためです。開発では 8080 のような1024以上のポートを使い、本番ではリバースプロキシ(nginx など)を 80・443 番で動かすのが一般的です。

まとめ

  • 原因は「そのポートを別のプロセスが使っている」。Spring Boot・Java・Node.js・Python・Docker のどれも同じ
  • Windows は netstat -ano | findstr :8080、Mac・Linux は lsof -nP -iTCP:8080 -sTCP:LISTEN で PID を調べる
  • 多いのは、前回起動したアプリの消し忘れ。止める前に何のプロセスかを確かめる
  • docker-proxy が出たらコンテナ。port is already allocated も別のコンテナ
  • 止められないなら自分のポートを変える。Docker は -p の左側だけを変える

参考・出典

確認日はいずれも 2026年10月10日です。

  • Spring Boot「Embedded Web Servers(Change the HTTP Port)」:https://docs.spring.io/spring-boot/how-to/webserver.html
  • Spring Boot 4.1.1 ソース(PortInUseFailureAnalyzer):https://github.com/spring-projects/spring-boot
  • Microsoft Learn「netstat」:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/netstat
  • Microsoft Learn「taskkill」:https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/taskkill
  • Microsoft Learn「Get-NetTCPConnection」:https://learn.microsoft.com/en-us/powershell/module/nettcpip/get-nettcpconnection
  • Apple サポート「Apple ソフトウェア製品で使われる TCP および UDP ポート」:https://support.apple.com/en-us/103229
  • Vite「Server Options」:https://vite.dev/config/server-options

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「Port 8080 was already in useの直し方|OS別の手順」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?