Docker启动Nacos不成功,Nacos页面访问不了,报No Database set错的问题分析和解决
关于作者:
我是星河,一个深耕自己,不内耗的长期主义者。一个对技术充满激情,对工作对生活充满热情的热血青年。坚信,真正能让大家看懂的技术文章才是好文章,坚持用更通俗易懂的大白话写技术博文,并会持续更新。我是星河,愿我们既能凝望脚下的路,也能心怀璀璨的远方。
和之前一样,今天还是用通俗易懂的大白话来写点我自己的理解和总结。
今天来讲一下Docker启动Nacos 报 No Database set错的问题
整体分析:
该错误通常是由于Nacos启动时依赖的MySQL数据库尚未完全启动所致。
本文将给出两种解决方法:
(1)、调整启动顺序,确保MySQL完全启动后再启动Nacos;
(2)、若仍报错,建议先用MySQL客户端连接访问一次MySQL的nacos库,之后再启动nacos
下面是具体分析
一、问题分析
其实,这个问题非常简单,因为nacos启动时需要依赖mysql数据库里的nacos库
所以必须先等mysql完全启动完成了,然后再使用docker启动Nacos
但是,如果你的docker设置了开机自启,并且docker里的mysql和nacos,你也设置了开机自启,那你虚拟机一开机,docker里的mysql和nacos会一起启动,那你启动的nacos的时候,mysql就可能还没启动好。所以,就会报No Database set的错。
或者也有可能你没开机自启,但是你使用docker去启动时,没等msyql完全启动好,你就去启动nacos了,也会报这个错。
二、解决
知道了问题的原因,那解决就很简单了
如果你是开机自启的,那打开虚拟机后,先把nacos stop了
docker stop nacos
然后,再重新启动一下nacos,但前提还是此时你的mysql必须完全启动好了
docker start nacos
然后再使用以下命令查看一下nacos的启动日志
docker logs -f nacos
这时候看nacos的日志,应该就不报那个错了。
但是,有时候严格的按照这个顺序启动之后,有可能还会报这个错,那就继续进行下边的操作
三、如果还报错,尝试这个方法
如果严格的按照这个顺序启动之后,还报这个错,那就继续进行下边的操作
再次把nacos停掉
docker stop nacos
然后,使用任意一个连接mysql的客户端工具,比如DataGrip或者Navicat。使用这种客户端工具连接上你的mysql,然后连接并打开nacos这个库,再随便双击打开里边的任意一个表,反正只要查询一下你mysql里nacos这个库的任意数据就行,如下图

然后,你再启动nacos,发现就不报错了
我分析大概的原因是:
-
很多 MySQL Docker 镜像,启动后,在没有任何连接请求时,它会处于“启动成功,但初始化未完成/未唤醒”的状态。
-
DataGrip或者Navicat的查询操作让mysql数据库真正完成初始化,让数据库对外服务端口开放,状态变为READY。
-
等外界访问过一次mysql,mysql真正READY“苏醒”之后,再启动Nacos,Nacos就能连上了。
不过这只是我自己的分析,具体的原因,nacos官方目前也没给准确的回复。
不过,咱们不需要在这花太多时间和精力,只要能解决目前的问题就好了。以后就大概知道,你mysql启动后,在naocs启动前至少需要建立连接访问过一次,不要让nacos在启动过程中作为第一个建立连接去访问mysql的人,不然就报错,大概知道这个就行了。
ok,就写到这吧,希望我写的这篇,可以帮你解决这个问题。
纯手敲 原创不易,如果这篇文章对你有所启发或帮助,希望可以花费你一秒钟的时间,点亮【赞和推荐】,如果能点【分享】给更多同行的人,那就更好了。你的每一个互动,都是我持续创作的最大动力。感恩遇见,感谢陪伴。
点击下方 微信公众号 ,获取更多Java干货
更多推荐
所有评论(0)