【Nacos】windows启动nacos报错The Tomcat configured to listen on port 8848 failed to start.The port may alr
报错信息
windows系统,本地standalone模式启动nacos失败。
查看安装位置nacos\logs\nacos.log中日志

报错Caused by: java.net.BindException: Address already in use: bind
查看端口占用
查看是否端口已占用:
Nacos2.0版本新增了gRPC通讯方式,需要额外确认两个端口 9849 和 9849
#windows命令行
netstat -nao | findstr 8848
netstat -nao | findstr 9848
netstat -nao | findstr 9849
如果有占用,杀掉进程就不用往后看了。
# 这里11111是上个命令得到的进程PID值
taskkill /F /PID 11111 /T
如果没有查到,请反思是否安装了Hyper-v或WSL2(DockerDesktop),windows默认为它们分配了某些范围的端口,所以不会查出明确占用端口号。
排查动态端口
动态端口范围
动态端口是windows操作系统可以为客户端应用程序分配的临时端口。
查看动态端口范围的命令
# tcp协议,nacos基于tcp
netsh int ipv4 show dynamicportrange protocol=tcp
# udp协议
netsh int ipv4 show dynamicportrange protocol=udp
输出类似于
C:\Users\CC>netsh int ipv4 show dynamicportrange protocol=tcp
协议 tcp 动态端口范围
---------------------------------
启动端口 : 1024
端口数 : 13977
C:\Users\CC>netsh int ipv4 show dynamicportrange protocol=udp
协议 udp 动态端口范围
---------------------------------
启动端口 : 49152
端口数 : 16384
表示1024到15001,49152到65536之间的端口可以被分配,明显8848端口包含在内,是允许被分配的才对。
无法被分配的原因是动态端口范围内一些被“征用”了,例如规划给WSL。即保留端口范围。
被排除端口范围
查看保留端口范围:
# tcp协议
netsh interface ipv4 show excludedportrange protocol=tcp
# udp协议
netsh interface ipv4 show excludedportrange protocol=udp
# linux系统
sudo iptables -L --line-numbers -t filter -p tcp
可以看到8848处于被征用端口范围中,已破案。
C:\Users\CC>netsh interface ipv4 show excludedportrange protocol=tcp
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
2869 2869
8470 8569
8781 8880
13337 13436
13437 13536
50000 50059
C:\Users\CC>netsh interface ipv4 show excludedportrange protocol=udp
协议 udp 端口排除范围
开始端口 结束端口
---------- --------
50000 50059 *
55806 55905
60182 60281
61971 62070
62894 62993
64228 64327
64328 64427
动态端口占用解决
方案1:关闭应用
关闭Hyper-v或WSL2,最简单。
但是装这俩一般有使用docker需求,为了不影响docker,可以排除需要的端口,或修改动态端口范围。
方案2:排除端口
排除指定的端口不被动态分配:
# windows 需要管理员权限。
# netsh int ipv4 add excludedportrange protocol=tcp startport=要排除的端口 numberofports=范围
netsh int ipv4 add excludedportrange protocol=tcp startport=8848 numberofports=1
netsh int ipv4 add excludedportrange protocol=tcp startport=9848 numberofports=1
netsh int ipv4 add excludedportrange protocol=tcp startport=9849 numberofports=1
# linux
sudo iptables -A INPUT -p tcp --dport 8848:9849 -j DROP
若报错“另一个程序正在使用此文件”,需要先终止该程序。
使用下面两种方式停止Hyper-v或WSL > 重启 > 管理员打开powershell > 添加排除端口 > 重新启用Hyper-v或WSL > 重启
Hyper-v启停有关命令
#查看状态
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
#启用
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
#禁用
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Hypervisor
WSL启停
设置 > 系统(有的windows版本在【应用】中)>可选功能>更多widows功能 > 取消勾选【适用于Linux的Windows子系统】
事后重启。
方案3: 设置保留端口范围
另一方案是重设保留端口的范围:
# ipv4 start表示起始端口号,num表示范围
netsh int ipv4 set dynamic tcp start=10000 num=13977
# ipv6
netsh int ipv6 set dynamic tcp start=10000 num=13977
重启nacos验证
nacos启动成功。
Nacos started successfully in stand alone mode. use external storage
更多推荐
所有评论(0)