配置Nacos的MYSQL_SERVICE_HOST为docker宿主机的ip地址后,docker上的nacos不能访问到同一docker上的mysql。
报错信息如下:
No DataSource set at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:225) at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307) at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136) ... 53 common frames omitted Caused by: java.lang.IllegalStateException: No DataSource set at org.springframework.util.Assert.state(Assert.java:73) at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452) at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473) at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480) at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:674) at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51) at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:282) at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:195) ... 61 common frames omitted
报错信息显示没有配置数据源,说明数据库访问不到。
原因是在Docker中,连接不同的容器通常需要使用网络进行通信。Docker容器默认情况下运行在不同的网络隔离环境中,它们之间需要通过网络才能进行通信。
对于Nacos和MySQL的连接需要确保Nacos容器和MySQL容器运行在同一网络中。
按照以下步骤参考:
- 创建一个新的Docker网络:
docker network create mynetwork
- 将Nacos容器和MySQL容器都加入到新创建的网络中:
docker network connect mynetwork nacos和docker network connect mynetwork mysql
- 也可以在创建容器之时即连接到docker网络,在命令中添加参数:
--network mynetwork
然后在配置时还需要把Nacos的MYSQL_SERVICE_HOST参数设置为docker中的mysql的ip地址:
docker network inspect mynetwork
此时会显示:
将这个ip地址配置给MYSQL_SERVICE_HOST,重启nacos容器,成功:文章来源:https://www.toymoban.com/news/detail-761200.html
文章来源地址https://www.toymoban.com/news/detail-761200.html
到了这里,关于Docker中的Nacos与Docker中的MySQL不能连接,报错No DataSource set的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!