Docker启动Nacos报错:No DataSource set问题及解决

 更新时间:2025年11月03日 16:55:14   作者:编程洪同学  
本文介绍了在使用docker-compose构建Nacos容器时遇到的问题及解决方法,主要问题是在重启Docker引擎后,Nacos无法启动,错误提示“NoDataSourceset”,解决方案包括使用容器名指定服务、在JDBC驱动程序中使用网卡IP及添加参数“allowPublicKeyRetrieval=true”

问题

笔者使用 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清理中断构建后产生的镜像和缓存(实际操作)

    docker清理中断构建后产生的镜像和缓存(实际操作)

    Ctrl+C中断构建后,Docker会残留中间层镜像和缓存,清理方法包括删除构建缓存(docker build prune)、移除无标签镜像(docker image prune)、彻底清理(docker system prune -a)及检查空间占用,建议根据需求选择,避免误删,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • Idea通过docker compose 发布项目的过程

    Idea通过docker compose 发布项目的过程

    这篇文章主要介绍了Idea结合docker-compose发布项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 解决docker使用GDB,无法进入断点的问题

    解决docker使用GDB,无法进入断点的问题

    这篇文章主要介绍了解决docker使用GDB,无法进入断点的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker修改Docker容器启动配置参数过程

    docker修改Docker容器启动配置参数过程

    本文介绍了两种使Docker容器开机自启的方法,一是修改启动命令,二是修改容器配置文件hostconfig.json中的RestartPolicy为always
    2026-04-04
  • Docker部署portainer的详细步骤

    Docker部署portainer的详细步骤

    Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群,今天通过本文给大家介绍Docker部署portainer的步骤,感兴趣的朋友一起看看吧
    2022-01-01
  • 使用Docker+Nginx部署vue项目详细图文教程

    使用Docker+Nginx部署vue项目详细图文教程

    这篇文章主要给大家介绍了关于使用Docker+Nginx部署vue项目的相关资料,文中通过图文介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 基于Docker+Watchtower自动化部署后端服务

    基于Docker+Watchtower自动化部署后端服务

    本文提供了一套生产级通用后端服务自动化部署方案,基于 Docker Compose 编排 + Watchtower 自动更新机制,适用于所有已容器化的后端应用,希望对大家有所帮助
    2026-05-05
  • 详解CentOS 7 : Docker私有仓库搭建和使用

    详解CentOS 7 : Docker私有仓库搭建和使用

    本篇文章主要介绍了详解CentOS 7 : Docker私有仓库搭建和使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 解决使用Docker Compose管理容器的问题

    解决使用Docker Compose管理容器的问题

    在Docker Compose中,根据一个配置文件,将所有与应用系统相关的应用和对应的容器进行配置,再根据Docker Compose提供的命令进行启动,就可以解决上面说的多容器之间的复杂问题,感兴趣的朋友跟随小编一起看看吧
    2021-09-09
  • docker搭建emqx全过程

    docker搭建emqx全过程

    EMQX 是一个开源的、高度可扩展的、跨平台的MQTT代理,用于处理来自物联网、移动应用程序和分布式系统的数据,本文给大家介绍docker搭建emqx的详细过程,感兴趣的朋友一起看看吧
    2024-03-03

最新评论