localhost 端口冲突排查
解决 localhost 80、443、3000、5173 等端口被占用导致 Apache、Vite、Next.js 无法启动的问题。
启动 XAMPP、Vite、Next.js 或 Docker 时,常遇到 「端口已被占用」 或 Address already in use。本文说明如何排查与释放 localhost 常见端口。
高频冲突端口
| 端口 | 常见占用者 | 典型报错场景 |
|---|---|---|
| 80 | Apache、IIS、Skype、Caddy | XAMPP Apache 无法 Start |
| 443 | Apache HTTPS、IIS | SSL 站点启动失败 |
| 3000 | Next.js、Express、NestJS、CRA | 第二个 Node 项目启动失败 |
| 3306 | MySQL、MariaDB | Docker MySQL 与 XAMPP 冲突 |
| 5173 | Vite | 多个 Vite 项目或上次进程未退出 |
| 8080 | Tomcat、备用 Apache | Java / 第二 Web 服务 |
| 5432 | PostgreSQL | 本机 PG 与 Docker PG 冲突 |
| 6379 | Redis | 重复安装 Redis |
查看占用进程
macOS / Linux
# 查看 5173 端口
lsof -i :5173
# 或
sudo ss -tlnp | grep 5173输出中 PID 列即为进程号。
Windows
netstat -ano | findstr :5173最后一列为 PID,在任务管理器或:
taskkill /PID <pid> /F结束进程(Unix)
kill <PID>
# 强制
kill -9 <PID>常见场景与处理
XAMPP Apache 无法绑定 80
- 关闭 IIS、Skype、其他 Web 服务器
- 或修改
httpd.conf中Listen 80→Listen 8080,改用 http://localhost:8080 - Windows 检查 World Wide Web Publishing Service 是否运行
Vite 5173 被占用
Vite 会自动尝试 5174、5175… 也可显式指定:
npm run dev -- --port 3000或在 vite.config.ts 设置 server.port。
两个 MySQL 同时运行
XAMPP MySQL 与 Docker -p 3306:3306 冲突。方案:
- 停 XAMPP MySQL,只用 Docker
- 或 Docker 映射
3307:3306,应用连接localhost:3307
Next.js 与 NestJS 争抢 3000
其中一个改端口:
npm run dev -- -p 3001 # Next.js
PORT=3001 npm run start:dev # NestJS(或在 main.ts 修改)预防建议
- 不用时关闭 XAMPP 控制面板中的服务
- Docker 项目
docker compose down释放映射端口 - 使用 localhost-ports 速查表确认各工具默认端口
- 多项目并行时为每个项目分配不同端口并写入 README
小结
端口冲突先用 lsof / netstat 找到 PID 并结束进程,或修改服务监听端口;本地开发中最常冲突的是 80(Apache)、3000(Node)、5173(Vite)、3306(MySQL)。