localhost 端口冲突排查

解决 localhost 80、443、3000、5173 等端口被占用导致 Apache、Vite、Next.js 无法启动的问题。


启动 XAMPP、Vite、Next.js 或 Docker 时,常遇到 「端口已被占用」Address already in use。本文说明如何排查与释放 localhost 常见端口。

高频冲突端口

端口常见占用者典型报错场景
80Apache、IIS、Skype、CaddyXAMPP Apache 无法 Start
443Apache HTTPS、IISSSL 站点启动失败
3000Next.js、Express、NestJS、CRA第二个 Node 项目启动失败
3306MySQL、MariaDBDocker MySQL 与 XAMPP 冲突
5173Vite多个 Vite 项目或上次进程未退出
8080Tomcat、备用 ApacheJava / 第二 Web 服务
5432PostgreSQL本机 PG 与 Docker PG 冲突
6379Redis重复安装 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

  1. 关闭 IIS、Skype、其他 Web 服务器
  2. 或修改 httpd.confListen 80Listen 8080,改用 http://localhost:8080
  3. 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)。

访客计数:------ Best viewed in Netscape Navigator · 800×600 © LocalHost Run