如何在Docker下部署nacos并注册Java服务
在Docker下部署nacos并注册Java服务并不是一个困难的事,难就难在碰到Java服务注册碰到的异常,下面分享一下如何在Docker中部署Docker,如何注册Java服务,并且来解决这个异常的。环境:VMWare 部署两台Linux Ubuntu虚拟机,一台做nacos服务注册中心,一台做Java服务提供者,保证两台能够相互ping通。
步骤:
1.在docker中部署nacos
首先在docker repository中搜索一下nacos:sudo docker search nacos,我们选择第一个nacos/nacos-server.
其次拉取nacos镜像:sudo docker pull nacos/nacos-server
接着查看一下nacos的版本(为什么需要这个步骤,是因为后面要在Spring Cloud alibaba中注册Java服务,nacos的版本和Spring Cloud alibaba的版本要匹配,否则注册不上报错):sudo docker inspect nacos/nacos-server,下面所示的nacos版本是v2.0.3: "org.opencontainers.image.version": "v2.0.3"
接着运行nacos镜像:
docker run -d -e prefer_host_mode=本机ip(centos7的) -e MODE=standalone -v /nacos/logs:/home/nacos/logs -p 28999:8848 --name nacosdemo --restart=always nacos/nacos-server
最后我们访问:localhost:28999/nacos/:
2.在另外一台虚拟机上注册Java服务,使用 spring cloud alibaba注册Java服务。
首先用alibaba spring boot 脚手架初始化应用:https://start.aliyun.com/bootstrap.html,选择Spring boot版本为2.6.11,具体可以参考之前的文章,如:分布式配置nacos搭建踩坑指南(下)
然后注册一个Java服务,具体可参考:nacos服务注册,注意这里的地址配置成docker 中的nacos地址,端口改为上述docker运行nacos镜像中的28999.application.properties配置如下:
spring.application.name=nocos-discovery-provider-sample spring.cloud.nacos.discovery.username=nacos spring.cloud.nacos.discovery.password=nacos spring.cloud.nacos.discovery.server-addr=http://192.168.1.107:28999 spring.cloud.nacos.discovery.namespace=public
运行,发现注册不上nacos,报错,仔细观察是客户端gprs请求call超时了
ERROR 37644 --- [ restartedMain] c.a.c.n.registry.NacosServiceRegistry : nacos registry, config-client register failed...NacosRegistration.................... com.alibaba.nacos.api.exception.NacosException: Request nacos server failed: ..................... Caused by: com.alibaba.nacos.api.exception.NacosException: Client not connected,current status:STARTING
发生这个异常的原因是spring-cloud-alibaba-dependencies的版本和当前的nacos版本不符,我们需要修改spring-cloud-alibaba-dependencies的版本。查看现在的spring-cloud-alibaba-dependencies版本是2021.0.4.0,我们尝试把它修改为: <version>2.1.2.RELEASE</version> ,再运行,发现注册成功了。
原来每一个版本的spring-cloud-alibaba和nacos都有一个适配版本,如果报上述的异常,我们可以修改spring-cloud-alibaba的版本,从而能正常注册成功了。可以参考spring cloud alibaba github上的版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E.