0


Docker 启动 Nacos 报错:No DataSource set


请添加图片描述

👨🏻‍💻 热爱摄影的程序员
👨🏻‍🎨 喜欢编码的设计师
🧕🏻 擅长设计的剪辑师
🧑🏻‍🏫 一位高冷无情的编码爱好者
大家好,我是 DevOps 工程师
欢迎分享 / 收藏 / 赞 / 在看!

【问题】笔者使用 docker-compose 构建的 Nacos 容器,每当重启 Docker 引擎后启动 Nacos 报错:No DataSource set,且笔者相关的数据源配置是没有问题的。

笔者相关环境及软件信息如下:

  • 操作系统:Apple M1 Pro 版本 12.6.3
  • Nacos:v2.2.2-slim
  • MySQL:8.0.32
Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set

请添加图片描述

【解决方案一(正规)】容器构建的服务中,可以使用容器名指定某个容器服务,因此可以修改为:

db.url.0=jdbc:mysql://<container_name>:<port>/mdb

,其中

<container_name>

为容器名称,而不是用具体 IP;

<port>

要使用容器内端口号,而不是映射的宿主机端口号,如端口映射为:

"3307:3306"

,应该填写

3306

,而不是

3307

【解决方案二】在 JDBC 驱动程序中要使用网卡的 IP。如:

db.url.0=jdbc:mysql://192.168.0.120:3306/mdb

,否则 Nacos 将无法找到对应的驱动链接。

【解决方案三】在 JDBC 驱动程序中添加上参数 ​

&allowPublicKeyRetrieval=true

,就可以正常启动。

db.url.0=jdbc:mysql://127.0.0.1:3306/mdb?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true![请添加图片描述](https://img-blog.csdnimg.cn/8cc8aac9de864b2190061bda7acbf451.png)

【原因】
在 MySQL JDBC 驱动程序的 8.0.22 版本之前,如果服务器的公钥未明确信任或者密钥检索失败,连接可能会失败。通过在连接字符串中设置"&allowPublicKeyRetrieval=true",可以指示驱动程序允许检索公钥,即使它未明确信任。

"&allowPublicKeyRetrieval=true"是 MySQL JDBC 驱动程序中的一个参数,用于在连接字符串中允许在与 MySQL 服务器进行 SSL/TLS 加密握手期间检索公钥。该参数在连接到需要 SSL/TLS 加密以实现安全通信的 MySQL 服务器时是相关的。

然而,从 MySQL JDBC 驱动程序版本 8.0.22 开始,默认情况下"allowPublicKeyRetrieval"的值已更改为"true"。因此,在大多数情况下,您可能不需要显式指定此参数,除非使用较旧的驱动程序版本或希望在配置中明确指定。

使用 MySQL 的 SSL/TLS 加密提供了额外的安全性,通过加密在客户端和服务器之间传输的数据。如果 MySQL 服务器已配置为使用 SSL/TLS,请在 JDBC 连接中启用 SSL 以确保安全通信。
请添加图片描述

标签: docker 容器 运维

本文转载自: https://blog.csdn.net/qq_44402184/article/details/132014373
版权归原作者 编程洪同学 所有, 如有侵权,请联系我们删除。

“Docker 启动 Nacos 报错:No DataSource set”的评论:

还没有评论