关于 detecting-port-conflicts
用于诊断开发服务器因端口被占用而无法启动的排查技能,指导开发者查找占用进程,并选择结束进程或更换端口。
主要功能
- 01识别常见端口占用错误
- 02使用 lsof 查找进程信息
- 03提供结束进程或更换端口方案
- 04涵盖 Docker 和 TIME_WAIT 情况
适用场景
- 01排查开发服务器启动失败
- 02判断结束进程还是改用其他端口
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ revitalb-port/ skills-registry-demo --skill detecting-port-conflicts安装后在 Claude Code 中输入/detecting-port-conflicts确认已加载。
详细介绍
检测端口冲突
当开发服务器因端口已被占用而无法启动时,请诊断并解决问题。
检测
扫描终端输出,查找以下模式:
EADDRINUSEaddress already in usePort XXXX is already in usebind: address already in useOSError: [Errno 98] Address already in use
从错误消息中提取端口号。
诊断
查找占用端口的程序:
lsof -i :<PORT> -P -n
这会显示 PID、进程名称和用户。常见原因包括:
- 未能正常关闭的上一个开发服务器
- 另一个项目的开发服务器
- Docker 容器
- 系统服务
解决方案
选项 1:终止占用端口的进程
kill <PID>
# If it doesn't stop:
kill -9 <PID>
然后重新启动原服务器。
选项 2:使用其他端口
建议使用下一个可用端口:
# Check if port+1 is free
lsof -i :<PORT+1> -P -n
更新开发服务器配置或启动命令:
- Next.js:
next dev -p <PORT> - Vite:
vite --port <PORT> - Express:设置
PORT环境变量 - Django:
python manage.py runserver <PORT>
选项 3:终止所有 node 进程(强制选项)
killall node
仅在用户确认后建议此操作——它会终止所有进程。
提示
- 在 macOS 上,低于 1024 的端口需要 root 权限
- Docker 容器绑定的端口即使容器已停止仍会保留——请检查
docker ps - 如果
lsof没有显示任何内容,端口可能处于 TIME_WAIT 状态——等待 30 秒,或使用其他端口
评论
支持 Markdown