node运行时3000端口被占用解决办法

总结了三种方法,来源:https://stackoverflow.com/questions/39322089/node-js-port-3000-already-in-use-but-it-actually-isnt

0. 常见场景和注意事项

  • Web 服务器: 80 和 443 端口通常用于 HTTP 和 HTTPS,如果你的 Web 服务器无法启动,可能是这些端口被其他服务占用。
  • 数据库服务器: 不同的数据库有默认的端口号(例如 MySQL 是 3306,PostgreSQL 是 5432),检查这些端口是否被占用。
  • 多个服务: 当你在同一台机器上运行多个服务时,注意避免端口冲突。
  • Docker: 如果端口被 Docker 容器占用,可以使用 docker ps 找到容器,然后停止或删除它。
  • 权限: 某些端口(小于 1024 的端口)可能需要 root 权限才能使用,确保你的服务运行的用户有足够的权限。

1. 通过搜索端口定位进程来关闭

对于Linux/Mac OS搜索(sudo)

请在终端中运行以下命令:

1
2
3
4
5
$ lsof-i tcp:3000
or
$ sudo ss -tulnp | grep <端口号>

$ kill -9 PID

注意,
使用 kill 命令发送信号给该进程。通常可以使用 kill -9 <进程ID> 强制终止进程。

1
sudo kill -9 12345  

警告: 使用 kill -9 是强制终止,不推荐在生产环境中使用,因为它可能导致数据丢失或者进程状态异常。应该优先尝试使用 kill <进程ID> 发送 SIGTERM 信号,让进程优雅关闭。

在Windows10上

1
2
3
netstat-ano | findstr:3000

tskill typeyourPIDhere

在git bash中将tskill更改为taskkill

2. 通过npx命令来关闭

1
npx kill-port 3000

如果需要关闭多个进程,则可以通过空格来分割:

1
npx kill-port 3000 8080 4200

3. 通过GUI来关闭(win)

win10-close-3000-port

4. 如何防止端口被占用

  • 规划: 在部署服务之前,仔细规划端口使用,避免冲突。
  • 监控: 定期监控端口使用情况,及时发现问题。
  • 使用 netstat -apn 监控所有连接: 使用 sudo netstat -apn 查看所有正在使用的端口号,并识别哪些程序正在占用端口,可以帮助你发现潜在的问题。
  • 自动化脚本: 使用自动化脚本来启动和停止服务,确保端口使用的正确性。
  • Docker compose: 使用 docker compose 来管理多容器应用,可以避免端口冲突。