Docker启动Nacos(单例)、Redis

2年前 (2022) 程序员胖胖胖虎阿
301 0 0

Nacos启动(带配置库参数)

  • MYSQL_***启动时附带配置mysql连接参数
  • MODE=standalone单例启动,默认集群
  • SPRING_DATASOURCE_PLATFORM=mysql指定schema类型
docker run -d \
-p 8848:8848 \
--name nacos --env MODE=standalone --env \ SPRING_DATASOURCE_PLATFORM=mysql --env 
MYSQL_SERVICE_HOST=127.0.0.1 --env 
MYSQL_SERVICE_PORT=3306 --env 
MYSQL_SERVICE_DB_NAME=nacos_config  --env 
MYSQL_SERVICE_USER=root --env 
MYSQL_SERVICE_PASSWORD=123456\!@# 
--restart=always nacos/nacos-server:latest

nacos报错

Unknown COLUMN 'encrypted_data_key' IN 'field list'
BUG产生原因:
目前(nacos 2.1.0后)官网nacos版本更新后有下面的优化:
数据库表 config_info、config_info_beta、his_config_info中需要新增字段 encrypted_data_key ,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql中已经添加该字段。

  • 解决,因为上面启动的最新版的,所以添加下字段就OK了
ALTER TABLE config_info/config_info_beta/his_config_infoADD COLUMN `encrypted_data_key` text NOT NULL COMMENT '秘钥'

使用中BUG记录与处理

  • Nacos下线服务时,caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused: The Raft Group [naming_instance_metadata] did not find the Leader node;
  • 解决:Nacos 采用 raft 算法来计算 Leader,并且会记录前一次启动的集群地址,所以当docker重启服务时 IP 改变了会导致raft记录的集群地址失效,导致选 Leader 出现问题只要删除 Nacos 根目录下 data 文件夹下的 protocol 文件夹即可。
[root@localhost ~]# docker ps
#ba88aaf79aad   nacos/nacos-server:latest   "bin/docker-startup.…"   3 days ago    Up 4 seconds    0.0.0.0:8848->8848/tcp                                                                             nacos
[root@localhost ~]# docker exec -it ba88aaf79aad /
OCI runtime exec failed: exec failed: unable to start container process: exec: "/": 
permission denied: unknown
# 这个报错是路径不对
[root@localhost ~]# docker exec -it ba88aaf79aad /bin/bash
[root@ba88aaf79aad nacos]# ls
LICENSE  NOTICE  bin  conf  data  logs  target  work
[root@ba88aaf79aad nacos]# cd data
[root@ba88aaf79aad data]# ls
loader  naming  protocol  tenant-config-data  tps  upgrade.state
[root@ba88aaf79aad data]# cd protocol/
[root@ba88aaf79aad protocol]# ls
raft
[root@ba88aaf79aad protocol]# cd ..
[root@ba88aaf79aad data]# rm -rf protocol/
# 因为是docker exec进入容器修改的文件,所以需要自己进行容器的重启
  • 这里推荐使用管理工具partainer,这个工具本身也可以通过docker启动(如果服务多的多话)
    Docker启动Nacos(单例)、Redis

Redis启动与配置

  • -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。
  • --name redis 指定该容器名称,查看和进行操作都比较方便。
  • -v 挂载目录,规则与端口映射相同。(docker本身是沙箱隔离的容器,不能随便访问外部(主机)资源目录。通过挂载目录即将对应的主机上的目录挂载给容器内的目录,以达到容器间共用数据
  • -d docker.io/redis:latest 表示后台启动最新版本redis
  • redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/redis.conf
docker run -p 6379:6379 
--name redis 
-v /usr/local/docker/redis.conf:/etc/redis/redis.conf 
-d docker.io/redis:latest 
redis-server /etc/redis/redis.conf --appendonly yes

下载官方配置redis.conf

  • 修改redis.conf配置文件
#注释掉这部分,这是限制redis只能本地访问
bind 127.0.0.1

#默认yes,开启保护模式,限制为本地访问
protected-mode no

#默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
daemonize no

#设置密码(可选)
requirepass 123

#数据库个数(可选)
databases 16 

#redis持久化(可选)
appendonly yes

版权声明:程序员胖胖胖虎阿 发表于 2022年10月31日 下午1:56。
转载请注明:Docker启动Nacos(单例)、Redis | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...