💜 想真正擅长编程? 从一门课程开始,100% 免费

3-2、端口被占用2种快速解决方法

启动项目时报"Port already in use",这是新人最常遇到的报错之一。原因很简单:你要用的端口被别的程序占了。这节教你2种快速解决方法。


一、为什么会端口被占用

常见原因:

原因 说明
之前启动的没关 上次启动的SpringBoot/Redis/MySQL没正常关闭
多个项目抢同一端口 两个项目都用8080
其他软件占用 某些软件默认用8080
系统服务占用 Windows的一些服务可能占了常见端口

二、方法1:杀掉占用端口的进程

步骤1:查看谁占用了端口

Windows命令行:

Shell
# 查看端口占用(以8080为例)
netstat -ano | findstr 8080

输出:

TEXT
TCP    0.0.0.0:8080    0.0.0.0:0    LISTENING    12345
TCP    [::]:8080       [::]:0       LISTENING    12345

最后一列12345就是占用端口的进程PID。

步骤2:查看是什么程序

Shell
# 查看PID对应的进程
tasklist | findstr 12345

输出:

TEXT
java.exe    12345    Console    1    300,000 K

可以看到是java.exe,大概率是你之前启动的SpringBoot。

步骤3:杀掉进程

命令行杀:

Shell
# 强制杀掉
taskkill /PID 12345 /F

/F表示强制终止。

任务管理器杀:

  1. Ctrl+Shift+Esc打开任务管理器
  2. 详细信息标签 → 找到PID 12345
  3. 右键 → 结束任务

步骤4:重新启动

端口释放了,重新启动项目就行了。

一键脚本

写个bat脚本,以后端口被占了一键解决:

bat
@echo off
set /p PORT=请输入端口号:
echo 正在查找占用端口 %PORT% 的进程...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":%PORT% " ^| findstr "LISTENING"') do (
    echo 找到进程 PID: %%a
    tasklist | findstr %%a
    set /p CONFIRM=是否杀掉此进程?(Y/N):
    if /i "!CONFIRM!"=="Y" (
        taskkill /PID %%a /F
        echo 进程已终止
    )
)
pause

存成kill-port.bat,双击运行,输入端口号就能杀掉占用进程。


三、方法2:换一个端口

不想杀进程,或者不确定能不能杀,那就换端口。

SpringBoot换端口

方法1:改配置文件

YAML
server:
  port: 8081  # 换成8081或其他没被占用的端口

方法2:启动参数指定

IDEA运行配置 → Program arguments:

TEXT
--server.port=8081

方法3:环境变量

IDEA运行配置 → Environment variables:

TEXT
SERVER_PORT=8081

方法4:命令行启动时指定

Shell
java -jar my-project.jar --server.port=8081

Vue前端换端口

Vite项目 — vite.config.js:

JavaScript
export default defineConfig({
  server: {
    port: 3001  // 换端口
  }
})

Vue CLI项目 — vue.config.js:

JavaScript
module.exports = {
  devServer: {
    port: 3001
  }
}

Redis换端口

配置文件redis.windows.conf:

TEXT
port 6380  # 换成6380

MySQL换端口

配置文件my.ini:

ini
[mysqld]
port=3307  # 换成3307

改完要重启服务。


四、常用端口及冲突排查

端口 常用服务 冲突时怎么办
80 HTTP/Nginx 换8080或8081
443 HTTPS 换8443
3306 MySQL 换3307
6379 Redis 换6380
8080 Tomcat/SpringBoot 换8081
8848 Nacos 换8849
9090 各种Web服务 换9091
3000 Vue/React前端 换3001

批量检查端口

Shell
# 一次性检查多个端口
netstat -ano | findstr "8080 3306 6379 8848"

五、常见场景

场景1:SpringBoot启动报8080被占

TEXT
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 by using the server.port property.

解决: 按方法1杀掉占用进程,或者按方法2换端口。

场景2:Redis启动报6379被占

Shell
# 查看占用
netstat -ano | findstr 6379

# 通常是之前的Redis没关
taskkill /PID 12345 /F

场景3:IDEA端口被占但找不到进程

有时候netstat查不到,可能是IDEA内部的Tomcat没释放。

解决:

  1. 关掉IDEA里所有运行中的项目
  2. 重启IDEA
  3. 还不行的话重启电脑

场景4:Windows服务占用了端口

某些Windows服务(如IIS)会占用80端口。

Shell
# 查看占用80端口的
netstat -ano | findstr :80

如果是System进程(PID 4),是IIS或HTTP.sys服务:

Shell
# 停止IIS
iisreset /stop

# 或者禁用HTTP服务(需要管理员权限)
sc config http start= disabled

场景5:Docker容器端口冲突

Docker容器和本地服务端口冲突。

Shell
# 查看Docker容器端口映射
docker ps

# 停掉冲突的容器
docker stop 容器名

# 或重新运行时换端口
docker run -p 6380:6379 redis

六、预防端口冲突

1. 规划端口

提前规划好每个服务用什么端口,避免冲突:

TEXT
后端SpringBoot:8080
前端Vue:3000
MySQL:3306
Redis:6379
Nacos:8848
RabbitMQ:5672

2. 启动前检查

养成习惯,启动服务前先检查端口:

Shell
netstat -ano | findstr "你要用的端口"

没有输出就说明端口没被占用。

3. 正常关闭服务

用IDEA的停止按钮或Ctrl+C正常关闭,不要直接关窗口。

正常关闭会释放端口,强制关窗口可能导致端口没释放。


小结

方法 操作 适用场景
杀进程 netstat查PID → taskkill 明确是什么程序占的
换端口 改配置文件/启动参数 不确定能不能杀,或懒得杀

优先用方法1杀进程,不想杀就方法2换端口。两个方法30秒搞定。