在Windows Next js中出现EACCES: permission denied 0.0.0.0:3000错误

5

当我尝试使用yarn dev启动下一个js服务器时,它会抛出这个错误。为了使其正常工作,我需要重新启动整个系统。
而且我是在Windows上运行它。这需要很长时间。

Error: listen EACCES: permission denied 0.0.0.0:3000
    at Server.setupListenHandle [as _listen2] (net.js:1301:21)
    at listenInCluster (net.js:1366:12)
    at doListen (net.js:1503:7)
    at processTicksAndRejections (internal/process/task_queues.js:81:21) {
  code: 'EACCES',
  errno: -4092,
  syscall: 'listen',
  address: '0.0.0.0',
  port: 3000
}
6个回答

24

运行这个 .bat 文件

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
net stop winnat
net start winnat
exit

5
这对我有用,但如果能加上简短的解释会更好。 - Mark Stouffer
2
解释:这基本上是重新启动Windows的NAT服务,这可能有助于解决容器或虚拟机的某些网络问题。很可能您正在使用Docker或类似的工具。 - Samyar
说明:它使用mshta来执行一个VBScript命令,该命令打开一个具有提升权限(以管理员身份运行)的命令提示符(cmd.exe)。在命令提示符中,它将当前目录(cd)更改为批处理脚本的目录("%~dp0")。它使用net stop命令停止"winnat"服务。然后使用net start命令启动"winnat"服务。最后,它退出命令提示符。总之,该脚本旨在在具有管理员权限的Windows系统上停止然后启动"winnat"服务。 - undefined

11

不确定这是否是相同的问题,但我的错误是:

Error: listen EACCES: permission denied 0.0.0.0:3000
... Emitted 'error' event on Server instance at:
    at emitErrorNT (node:net:1357:8)
    at processTicksAnd

然后,这个修复了它:重新启动“主机网络服务”服务


1
你这次真是个顶尖高手!.. 奇怪的错误。突然冒出来了... - Tumo Masire
这对我有用,谢谢。 - undefined

8
在Windows系统中,许多人处理问题的方法是禁用虚拟以太网适配器(特别是在使用docker时)。可能也会出现另一个程序正在使用相同的端口,可以通过使用netstat -a命令来发现。
我将所有未使用的vEthernet适配器都禁用并重新启动。某个时间点它就神奇地再次起作用了。 设置可以在这里找到:控制面板>网络和Internet>网络连接。
来源: https://github.com/BrowserSync/browser-sync/issues/1705#issuecomment-508846475 (老实说,这是我遇到的最烦人的错误之一,也是转向Linux的原因)

1
在我的情况下,错误发生是因为使用的端口属于Hyper-V的保留端口。
当我重新启动计算机时,这个端口范围会发生变化,所以有时候我会遇到错误,有时候则不会。
这发生在我构建多个Nextjs应用程序时,突然间我无法启动其中一个应用。我尝试以管理员身份运行CMD,但出现了访问被拒绝的错误,甚至尝试查找与端口相关联的进程,但没有找到任何进程。
我尝试了多个端口,如3001、3002、3006、3009等,但都没有起作用。
这是错误信息:启动Nextjs应用时出错,EACCES null:3001。

Error while starting Nextjs app, EACCES null:3001

为了检查Windows中的保留端口,您可以使用cmd/powershell命令行工具,并输入以下命令: netsh interface ipv4 show excludedportrange protocol=tcp

checking reserved ports in windows

问题描述在这里:https://github.com/microsoft/WSL/issues/5514 通用解决方法(在评论554587817中):https://github.com/docker/for-win/issues/3171#issuecomment-554587817 快速解决方法:选择一个不属于保留范围的端口
npm run dev -- -p 4000
或者
通过编辑package json文件中的脚本部分,在dev中添加端口指定,像这样:
"dev": "next dev -p 4000"
现在它可以工作了:

starting nextjs app with custom port

这也在这里的帖子中提到了。

1
对我来说,那个端口运行的是Grafana。只需打开http://localhost:3000,你可能会发现正在运行的内容并在Services(Windows)中停止它。

0

EACESS只有在您无法访问要使用的端口时才会出现,与Linux不同,Windows可能有更多需要管理员权限的端口,3000可能只是其中之一,即使它没有被使用,所以将您的端口号增加一点,再加一个零。

正如另一个用户提到的,高达3016的端口用于管理目的,所以您可以使用它们,您可以使用接近3000的第一个地址是3017

C:\Users\thisisMe> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      2917        3016
      3047        3146
      5357        5357
     14645       14744
     48752       48851
     49052       49151
     49252       49351
     50000       50059     *

* - Administered port exclusions.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接