问题描述:使用Docker单节点常规部署Nacos服务后,我们可以正常登录到Nacos的管理界面中,但是在Spring Cloud项目启动进行连接时报错

com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE,如下图所示

16:21:46.321 [main] INFO  c.a.n.c.r.client - [printIfInfoEnabled,60] - [7a7aa944-7afb-49b0-b2c1-23eb68f79cec_config-0] Try to connect to server on start up, server: {serverIp = '192.168.1.108', server main port = 28999}
16:21:48.338 [main] ERROR c.a.n.c.r.c.g.GrpcClient - [printIfErrorEnabled,99] - Server check fail, please check server 192.168.1.108 ,port 29999 is available , error ={}
java.util.concurrent.ExecutionException: com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception
	at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:566)
	at com.alibaba.nacos.shaded.com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:445)
	at com.alibaba.nacos.common.remote.client.grpc.GrpcClient.serverCheck(GrpcClient.java:148)
	at com.alibaba.nacos.common.remote.client.grpc.GrpcClient.connectToServer(GrpcClient.java:264)
	at com.alibaba.nacos.common.remote.client.RpcClient.start(RpcClient.java:390)

解决方法:原因是Nacos2.0后增加了9848,9849端口来进行GRPC通信,我们需要开放两个8848偏移后的端口,不需要在application.properties文件中进行额外配置。这两个端口在Nacos2.0内部是通过8848+1000以及8848+1001这种偏移量方式计算出来的,不需要用户额外在配置文件中配置。但如果使用的是docker方式启动,需要把这两个端口进行配置。

最终我们只需要将Nacos的Docker容器启动命令修改为下面这样就可以:

docker run -d --name nacos \
-p 28999:8848 \
-p 29999:9848 \
-p 30000:9849 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=127.0.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
nacos/nacos-server:v2.1.2
Logo

一站式 AI 云服务平台

更多推荐