Docker中的Nacos与Docker中的MySQL不能连接,报错No DataSource set

配置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中的Nacos与Docker中的MySQL不能连接,报错No DataSource set_第1张图片

报错信息显示没有配置数据源,说明数据库访问不到。

原因是在Docker中,连接不同的容器通常需要使用网络进行通信。Docker容器默认情况下运行在不同的网络隔离环境中,它们之间需要通过网络才能进行通信。

对于Nacos和MySQL的连接需要确保Nacos容器和MySQL容器运行在同一网络中。

按照以下步骤参考: 

  1. 创建一个新的Docker网络:docker network create mynetwork
  2. 将Nacos容器和MySQL容器都加入到新创建的网络中:docker network connect mynetwork nacos和docker network connect mynetwork mysql
  3. 也可以在创建容器之时即连接到docker网络,在命令中添加参数:--network mynetwork

然后在配置时还需要把Nacos的MYSQL_SERVICE_HOST参数设置为docker中的mysql的ip地址

docker network inspect mynetwork

此时会显示:

Docker中的Nacos与Docker中的MySQL不能连接,报错No DataSource set_第2张图片

将这个ip地址配置给MYSQL_SERVICE_HOST,重启nacos容器,成功:

Docker中的Nacos与Docker中的MySQL不能连接,报错No DataSource set_第3张图片

你可能感兴趣的:(Docker,docker,mysql,容器,spring,cloud,1024程序员节)