使用docker-compose布署nacos集群,异常

问题的起因:

我自己通过docker stack deploy布署nacos集群,报错。表现为 浏览器里访问 8848端口,显示网页无法打开。

经过一段时间的排错,决定使用docker-compose进行排错。下面交待下环境,经过

1、环境

使用的官方dockerfile GitHub - nacos-group/nacos-docker: This project contains a Docker image meant to facilitate the deployment of Nacos .版本号为 docker 镜像为 v2.1.0

使用的dokcer-compose文件  cluster-hostname.yaml,即集群下hostname模式

2、测试经过

先是布署的单节点,没有问题。

再次尝试集群模式,报错。。。。发现有错误

nacos3  | Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure :
nacos3  | No DataSource set
nacos3  |       at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:139)
nacos3  |       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:413)
nacos3  |       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1761)
nacos3  |       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592)
nacos3  |       at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:514)
nacos3  |       at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:321)
nacos3  |       at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
nacos3  |       at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:319)
nacos3  |       at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
nacos3  |       at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
nacos3  |       at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1276)
nacos3  |       at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1196)
nacos3  |       at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:595)
nacos3  |       ... 41 common frames omitted
nacos3  | Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
nacos3  | No DataSource set
nacos3  |       at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:225)
nacos3  |       at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52)
nacos3  |       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
nacos3  |       at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
nacos3  |       at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
nacos3  |       at java.lang.reflect.Method.invoke(Method.java:498)
nacos3  |       at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363)
nacos3  |       at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307)
nacos3  |       at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136)
nacos3  |       ... 53 common frames omitted
nacos3  | Caused by: java.lang.IllegalStateException: No DataSource set

最后报错

nacos3  | XXXXXXX,346 WARN [WatchFileCenter] start to shutdown this watcher which is watch : /home/nacos/data/loader
nacos3  | 
nacos3  | XXXXXXX,347 WARN [WatchFileCenter] already closed
nacos3  | 
nacos3  | XXXXXXX,347 WARN [NotifyCenter] Start destroying Publisher
nacos3  | 
nacos3  | XXXXXXX,348 WARN [NotifyCenter] Destruction of the end
nacos3  | 
nacos3  | XXXXXXX,348 ERROR Nacos failed to start, please see /home/nacos/logs/nacos.log for more details.

排错经过

一顿排错,怀疑是两个容器间网络不通。于是在docker里的nacos-server中,安装telnet,mysql客户端,发现可以正常链接到mysql服务。无一次陷入了困境。不知道哪的原因。。。。

下面就开始搞官方的示例文件,就一个目标,怎么样能把官方的示例,让它报错,并且和我一样的报错。是不是太环了,按照这个方向行动起来

1) 尝试 只保留一个nacos-server,恩,可以启动,没事。

2)发现我的文件里的第一行和官方的不一样,把官方的改成3.8,恩,没事。

version: "3.8"  我的
version: "3"  官方

3) 尝试把mysql服务的端口,改成3307(因为我最早是3307布署的),我的天,惊喜来了,官方的也报错了。而且错误我的一样。

nacos3  | Caused by: java.lang.IllegalStateException: No DataSource set
nacos3  |       at org.springframework.util.Assert.state(Assert.java:73)
nacos3  |       at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77)
nacos3  |       at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371)
nacos3  |       at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452)
nacos3  |       at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462)
nacos3  |       at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473)
nacos3  |       at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480)
nacos3  |       at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:674)
nacos3  |       at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51)
nacos3  |       at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:282)
nacos3  |       at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:195)
nacos3  |       ... 61 common frames omitted
nacos3  |  ,341 WARN [WatchFileCenter] start close
nacos3  | 
nacos3  | ,343 WARN [WatchFileCenter] start to shutdown this watcher which is watch : /home/nacos/data/tps
nacos3  | 
nacos3  |  ,345 WARN [WatchFileCenter] start to shutdown this watcher which is watch : /home/nacos/conf
nacos3  | 
nacos3  |  8,346 WARN [WatchFileCenter] start to shutdown this watcher which is watch : /home/nacos/data/loader
nacos3  | 
nacos3  |  ,347 WARN [WatchFileCenter] already closed
nacos3  | 
nacos3  | ,347 WARN [NotifyCenter] Start destroying Publisher
nacos3  | 
nacos3  |  ,348 WARN [NotifyCenter] Destruction of the end
nacos3  | 
nacos3  |  ,348 ERROR Nacos failed to start, please see /home/nacos/logs/nacos.log for more details.

事实证明,端口不是3306就报错了。好像  MYSQL_SERVICE_PORT  这个环境变量有问题,具体原因未知。

因扰我了好久的问题。网上有说MYSQL数据库的问题,比如IP了,端口了,数据库链了 等等吧 的原题。还有说是mysql版本的问题。呵呵。如果你解决了一圈,依然是  No DataSource set  ,不防看下,你是mysql,是不是3306吧。

你可能感兴趣的:(docker,java,容器)