解决 error listen EACCES: permission denied 0.0.0.0:8081
今天发现电脑在重启后,打开 NodeJS 项目后无法运行,提示 8081 端口被占用了。一开始以为是某个 node 非正常占用导致,关闭所有相关的软件并确认没有node 进程存在后,再次运行项目,发现还是提示端口被占用。
按照我先前整理的《查找端口被占用的程序》,执行 netstat -ano | findstr 8081,发现找不到占用端口的进程。
看来要狂暴一下了。
经过一番搜索,网上有一个观点是端口被 WSL 占用了,大意是微软在使用 reservation/exclusion 机制来进行动态端口分配时,分配的端口号有的比较低,所以导致和其它软件冲突。
运行下面的命令:
netsh int ipv4 show excludedportrange protocol=tcp
发现 8081 端口在范围里面。
运行下面的命令:
netsh int ipv4 show dynamicport tcp
可以看到系统赋予的起始端口号确实比较低。
解决方法,就是重新设置动态端口的区间范围,例如运行下面的命令:
netsh int ipv4 set dynamic tcp start=49152 num=16384
非常重要的是,需要重启电脑。
重启后可以重新运行命令来确认下:
netsh int ipv4 show excludedportrange protocol=tcp
最后提醒大家的是,运行上面的命令时,最合适地是使用管理员权限来运行。