Spring Bootでポート競合エラーが出た時の対処法
こんにちは。ゆうせいです。
Spring Bootアプリを起動したときに 「ポート競合エラー」(Port already in use
)が発生することがあります。
例えば、以下のようなエラーが出ることがあります。
org.springframework.boot.web.server.PortInUseException: Port 8080 is already in use
これは、Spring Bootがデフォルトでポート8080を使用するため、
他のアプリがすでに8080番ポートを使っていると競合してしまうからです。
1. 解決方法一覧
ポート競合エラーが出た場合、次の方法で解決できます。
✅ (1) 別のポート番号を使う(推奨)
✅ (2) 競合しているプロセスを特定して終了する
✅ (3) Spring Bootをデフォルトのポートなしで起動する(ランダムポート使用)
✅ (4) DockerやKubernetesを使っている場合、設定を見直す
それぞれの方法を詳しく解説していきます!
(1) 別のポート番号を使う(推奨)
方法①: application.properties
で設定する
Spring Bootのポートを変更する最も簡単な方法は、src/main/resources/application.properties
に以下を追加することです。
server.port=8081
8081
に変更することで、他のアプリとポートが被らなくなります。
方法②: application.yml
で設定する
もし application.yml
を使っているなら、以下のように設定します。
server:
port: 8081
方法③: コマンドラインオプションで変更する
Spring Bootを起動するときに、--server.port
オプションを指定してポートを変更できます。
mvn spring-boot:run -Dspring-boot.run.arguments="--server.port=8081"
または、JARファイルを直接実行するときに指定できます。
java -jar myapp.jar --server.port=8081
(2) 競合しているプロセスを特定して終了する
もしポート8080を使っている他のアプリが不要なら、
そのプロセスを特定して終了すればSpring Bootをそのまま起動できます。
方法①: Mac / Linux で使用中のポートを確認
以下のコマンドを実行すると、8080ポートを使っているプロセスID(PID)が分かります。
lsof -i :8080
結果(例):
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1234 user 50u IPv6 0x1234 0t0 TCP *:http (LISTEN)
PID(1234) を使ってプロセスを強制終了できます。
kill -9 1234
方法②: Windowsで使用中のポートを確認
Windowsでは、以下のコマンドで8080ポートを使っているプロセスIDを調べます。
netstat -ano | findstr :8080
結果(例):
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 5678
この場合、PIDは 5678 です。次のコマンドでプロセスを終了できます。
taskkill /PID 5678 /F
(3) ランダムポートを使う
毎回異なるポートでSpring Bootを起動したい場合、ランダムポートを使用できます。
方法①: application.properties
に設定
server.port=0
この設定をすると、Spring Bootは利用可能なポートをランダムに選択して起動します。
起動後、ログに 「Tomcat started on port: XXXX」 のように出るので、ポート番号を確認できます。
方法②: コマンドラインでランダムポートを指定
java -jar myapp.jar --server.port=0
(4) DockerやKubernetesを使っている場合
DockerコンテナやKubernetesでSpring Bootを実行している場合、
ホストマシンとコンテナ間のポートマッピングが競合している可能性があります。
Dockerの設定を確認
Dockerでポート8080を使っている場合、docker ps
で確認できます。
docker ps
結果(例):
CONTAINER ID IMAGE PORTS NAMES
abc123 myapp 0.0.0.0:8080->8080/tcp myapp-container
もしポートを変更したいなら、docker-compose.yml
で修正します。
services:
app:
image: myapp
ports:
- "8081:8080" # ホストの8081 → コンテナの8080
5. まとめ(エラー解決の優先度)
方法 | 詳細 | 優先度 |
---|---|---|
✅ 別のポートを指定する | server.port=8081 に変更 | ⭐⭐⭐⭐(推奨) |
✅ 競合プロセスを終了する | lsof -i :8080 / taskkill でプロセスを強制終了 | ⭐⭐⭐ |
✅ ランダムポートを使う | server.port=0 で自動選択 | ⭐⭐ |
✅ Docker/K8sのポート設定を修正 | docker-compose.yml を修正 | ⭐ |
6. 最後に
Spring Bootのポート競合エラーはよくあるトラブルですが、server.port
を変更するのが最も簡単な解決方法 です。
server.port=8081
もし、どうしても 8080
を使いたい場合は、競合しているプロセスを特定して終了するのがベストです。
ポート競合に悩んだら、この方法を試してみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール

- 代表取締役
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
新入社員2025年2月27日Spring Bootの起動クラスの命名規則はある?
新入社員2025年2月27日Spring Bootでポート競合エラーが出た時の対処法
新入社員2025年2月27日GitHubのSSHのRSA鍵は何に紐付いているのか?
新入社員2025年2月27日Thymeleafの th: は何の略?