nacos docker部署的各种问题

Nacos 是配置管理中心,由阿里开源,java编写的能够帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。是以服务为中心的架构中的基础设施;
官网https://nacos.io/

Nacos由多种部署方式,单机、集群、多集群, 数据的存储除了内置的嵌入式数据库实现数据的存储以外,0.7版本增加了支持mysql数据源能力;但是当通过docker+mysql进行部署时,由于官方提供的docker image,更新并不及时,导致部署时问题不少;下面是我部署时遇到的一些问题;我参考了文档上提供的docker-compose 文档(https://github.com/nacos-group/nacos-docker

  • 首先是mysql的版本问题,nacos只支持的mysql版本是5.6.5+

  • 当使用自己非官方提供的mysql docker image (nacos/nacos-mysql:8.0.16) 时,需要在合适用户下添加一个合适的数据库,并导入nacos预制的表结构,如果你是直接通过上述的docker-compose文件中的standalone-mysql-8.yaml 来启动docker的话,当访问nacos控制台并提交配置或者相关创建操作时,会报参数格式错误,这是因为nacos/nacos-mysql:8.0.16 镜像中,预置的sql文件中,config_info 和his_config_info 表中缺失字段encrypted_data_key,log日志中也是报无法找到这个字段,需要手动添加这个字段 ALTER TABLE <表名> ADD encrypted_data_key text not null;
    最新的nacos-msyql.sql 文件见https://github.com/alibaba/nacos/blob/master/distribution/conf/nacos-mysql.sql添加链接描述

报错示例:

caused: PreparedStatementCallback; bad SQL grammar 
[SELECTid,data_id,group_id,tenant_id,app_name,content,md5,gmt_create,gmt_modified,
src_user,src_ip,c_desc,c_use,effect,type,c_schema,encrypted_data_key FROM 
config_info WHERE data_id=? AND group_id=? AND tenant_id=?]; 
nested exception is java.sql.SQLSyntaxErrorException: 
Unknown column 'encrypted_data_key' in 'field list';
caused: Unknown column 'encrypted_data_key' in 'field list';
  • nacos docker 启动时,需要在配置mysql url参数中指定时区serverTimezone=Asia/Shanghai 否则会链接数据库失败;既 MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
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


  • 如果还是发现无法连接你的mysql时, 检查nacos docker启动时 配置的环境变量mysql相关参数是否正确 ,主要参数是 MYSQL_SERVICE_HOST、MYSQL_SERVICE_DB_NAME、MYSQL_SERVICE_PORT、MYSQL_SERVICE_USER、MYSQL_SERVICE_PASSWORD
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值