- Spring
Port 8080 was already in useの直し方|OS別の手順
「Port 8080 was already in use」「Address already in use」は、起動しようとしたプログラムが使うポートを、別のプロセスがすでに使っているときに出るエラーです。 直し方は次の3段です。
- どのプロセスが使っているかを調べる(Windows は
netstat -ano、Mac・Linux はlsof -i :8080) - 不要なプロセスなら止める(前回起動したままのアプリが多い)
- 止められないなら、自分のアプリのポートを変える
確認環境: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期連続の黒字決算。