赞
踩
本人机器上部署了两个mysql,版本都是8.0.33,一个是用docker部署的,另一个是源码安装的,然后今天用docker安装nacos的最新版本,在配置持久化到mysql时,发生了很奇怪的现象,当配置的是源码版mysql,则一切顺利,而当配置的是docker版的mysql,则nacos容器会启动失败,报错:Caused by: java.lang.IllegalStateException: No DataSource set 查了很多文章都无法解决,但大概也知道原因,是因为mysql8采取了新的连接验证机制,所以导致nacos无法连接。至于为什么连接源码版mysql没有问题,连接docker版mysql却有问题,暂时还不清楚。
解决办法,把nacos容器的启动命令改成下面这样:
docker run -d \ -e NACOS_AUTH_ENABLE=true \ -e MODE=standalone \ -e JVM_XMS=128m \ -e JVM_XMX=128m \ -e JVM_XMN=128m \ -p 8848:8848 \ -e SPRING_DATASOURCE_PLATFORM=mysql \ -e MYSQL_SERVICE_HOST=120.79.150.146 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=12345 \ -e MYSQL_SERVICE_DB_NAME=nacos_config \ -e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \ --restart=always \ --privileged=true \ -v /home/data/nacos/logs:/home/nacos/logs \ --name my_nacos \ nacos/nacos-server:2.0.2
参数解释:
docker run -d \ #开启访问验证,即是需要账号密码才能访问nacos里的东西 #这样更安全,但也麻烦一点。不需要的话可以去掉 -e NACOS_AUTH_ENABLE=true \ #单机模式 -e MODE=standalone \ #下面三个是限制nacos容器的内存占用 -e JVM_XMS=128m \ -e JVM_XMX=128m \ -e JVM_XMN=128m \ #宿主机到容器的端口映射 -p 8848:8848 \ #指定持久化到的数据库类型 -e SPRING_DATASOURCE_PLATFORM=mysql \ #mysql的连接信息 -e MYSQL_SERVICE_HOST=120.79.150.146 \ -e MYSQL_SERVICE_PORT=3306 \ -e MYSQL_SERVICE_USER=root \ -e MYSQL_SERVICE_PASSWORD=12345 \ #持久化的database名 -e MYSQL_SERVICE_DB_NAME=nacos_config \ #mysql连接参数,不要漏了单引号! -e MYSQL_SERVICE_DB_PARAM='characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false' \ #让容器开机自启 --restart=always \ #特权模式启动 --privileged=true \ #nacos日志目录 -v /home/data/nacos/logs:/home/nacos/logs \ --name my_nacos \ nacos/nacos-server:2.0.2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。