1. 问题背景
在一次部署 Spring Boot 应用时,应用启动过程中报错:
NacosException: Client not connected, current status: STARTING
应用启动失败,完整堆栈显示问题发生在 Spring Cloud Alibaba 进行服务注册的过程中,调用了 Nacos 客户端 NacosServiceRegistry.register()
方法时,客户端连接状态依然处于 STARTING
。
2. 环境信息
- JDK:1.8.0_401
- Spring Boot:2.6.13
- Spring Cloud:2021.0.8
- Spring Cloud Alibaba:2021.0.6.2
- Nacos 服务端:2.3.2
3. 初步排查
根据 Nacos 官网文档,Nacos 2.x 相较 1.x 增加了 9848、9849 两个 RPC 通信端口:
- 9848:gRPC 请求端口
- 9849:gRPC 响应端口
如果服务端防火墙没有放行,或者 Docker 中没有映射出来,客户端可能无法完成注册。
因此第一步我检查了:
- 服务器防火墙是否放行了 8848、9848、9849 端口;
- Docker 部署环境中端口是否映射到宿主机。
结论:端口配置无误,防火墙也已放行,问题依旧。
4. 关键线索
在启动 Nacos 服务端时,日志中出现了两条警告:
2025-08-08 21:36:21,621 WARN InetAddress.getLocalHost().getHostName() took 10044 milliseconds to respond. Please verify your network configuration.
2025-08-08 21:36:31,664 WARN ManagementFactory.getRuntimeMXBean().getName() took 10042 milliseconds to respond. This may be due to slow host name resolution. Please verify your network configuration.
这意味着:
- 获取主机名
InetAddress.getLocalHost().getHostName()
耗时 10 秒以上 - 获取 JVM 运行时信息
ManagementFactory.getRuntimeMXBean().getName()
也同样耗时
这两个操作在 Nacos 服务端和客户端启动时都会被调用,如果主机名解析很慢,就会导致 Nacos 连接迟迟无法建立,客户端状态一直卡在 STARTING
。
5. 深入分析
Nacos 客户端启动时,会执行以下步骤:
- 获取本机 HostName 和 IP
- 建立与 Nacos 服务端的 gRPC 连接(9848/9849)
- 向服务端注册实例
如果第一步耗时过长(比如 10 秒),客户端与服务端的握手延迟就会很大,甚至超时。
造成主机名解析慢的常见原因:
- 主机名未配置本地解析,系统只能去 DNS 查询
- DNS 服务器不可用或延迟高
- 反向 DNS 查询超时

我的环境执行:
hostname
输出:
jx-tzpsapplication.novalocal
这是云环境(如 OpenStack)常见的主机名格式,但在 DNS 中并没有对应解析记录。
6. 解决方案
给主机名添加本地解析映射,避免 DNS 查询:
编辑 /etc/hosts
:
vi /etc/hosts
添加一行(127.0.0.1 或本机内网 IP 均可):
127.0.0.1 jx-tzpsapplication.novalocal jx-tzpsapplication
保存后,无需重启系统,只需重启应用。
7. 验证
修改 /etc/hosts
后,重新测试:
time hostname
time ping -c 1 jx-tzpsapplication.novalocal
结果均为毫秒级返回。

再次启动 Spring Boot 应用,Nacos 客户端能够在极短时间内完成连接与注册,Client not connected, current status: STARTING
错误消失。
8. 总结
这个问题表面看是 Nacos 2.x 端口防火墙 或 版本兼容,实际上是 主机名解析延迟 导致 Nacos 连接超时。
经验总结:
- Nacos 客户端启动慢,不一定是端口问题,先观察启动日志是否有主机名解析耗时警告
- 在云主机、Docker、K8s 环境中,建议显式配置
/etc/hosts
避免 DNS 解析依赖外部网络 - Nacos 2.x 的 RPC 端口必须放行,但即便端口没问题,主机名解析慢同样会让注册失败
如果你也遇到类似 Client not connected, current status: STARTING
的问题,不妨先确认主机名解析速度,很多时候这是被忽略的关键瓶颈。
Comments | NOTHING