# 1.将sql表先下载到docker mysql5.7里面
# 1.1.脚本地址如下
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
# 1.2.启动mysql
docker run -p 3306:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
# 13.将该sql文件复制到mysql5.7中(/home/local为我自己的地址,需变为自己下载的地址)
docker cp /home/local/nacos-db.sql mysql5.7:
# 2.在mysql中创建库 nacos_config
# 2.1.进入docker 的mysql中
docker exec -it mysql5.7 /bin/bash
#2.2.进入命令行,输入密码 123456
mysql -uroot -p
# 2.3.创建库
create database nacos_config;
# 2.4.运行sql文件,创建表
use nacos_config;
source /nacos-db.sql;
打开navicat,执行sql文件
1、docker 拉取nacos1.1.4版本
2、一开始按照2配置,但是一运行就停止,怀疑(看了日志应该是这个原因)是云服务器内存不足,后来我重启服务器了
3、按照3配置报错,然后挂载日志文件,查看日志文件,按照4的解决办法成功解决容器启动问题,但是客户端仍然连接不上集群,期间利用docker inspect mysq |grep IPAddress 查看内网ip地址
这是解决容器启动的方案
mode默认是非单机模式,于是我又试着添加NACOS_SERVERS。最终得到可以执行成功的如下docker执行命令。但是在连接的时候报错 server端unable to find local peer: 172.17.0.2:8848, all peers: [172.17.0.3:8848],客户端java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all server,于是改成单机成功注册,下面是启动代码,成功部署单机完成持久化。注意端口号要填容器真实端口号,而不是映射给主机的端口号。mysq版本为8.0出错,改成5.7成功
docker run -d --name nacos --restart=always \
-v /usr/local/web/nacos/logs:/home/nacos/logs \
-e MODE=standalone \
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=aiMONEY157732 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 -e NACOS_USER=nacos -e NACOS_PASSWORD=nacos \
-e JVM_XMS=512m -e JVM_XMX=512m \
-e JVM_XMN=256m -e JVM_MS=32m \
-e JVM_MMS=80m -p 8848:8848 nacos/nacos-server:1.1.4 \
这是客户端连不上的集群配置
docker run --name nacos --restart=always -v /usr/local/web/nacos/logs:/home/nacos/logs -d
-e NACOS_SERVERS=172.17.0.3:8848 #需要为该容器ip
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.4
-e MYSQL_MASTER_SERVICE_PORT=3306
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config
-e MYSQL_MASTER_SERVICE_USER=root
-e MYSQL_MASTER_SERVICE_PASSWORD=aiMONEY157732
-e SPRING_DATASOURCE_PLATFORM=mysql
-e MYSQL_DATABASE_NUM=1
-e NACOS_USER=nacos -e NACOS_PASSWORD=nacos -e JVM_XMS=512m
-e JVM_XMX=512m -e JVM_XMN=256m
-e JVM_MS=32m -e JVM_MMS=80m -p 8848:8848 nacos/nacos-server:1.1.4
这是3的配置报错
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘memoryMonitor’ defined in URL [jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-1.2.1.jar!/com/alibaba/nacos/config/server/monitor/MemoryMonitor.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘asyncNotifyService’ defined in URL [jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-1.2.1.jar!/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘serverListService’: Invocation of init method failed; nested exception is java.lang.RuntimeException: cannot get serverlist, so exit.
4、4的集群安装,还未实验
//nacos-1
docker run \
--name nacos-1 \
--hostname=nacos-1 \
--restart=always \
--ip 172.17.0.3 \
-d \
-e NACOS_SERVERS=172.17.0.3:8848,172.17.0.4:8848,172.17.0.5:8848 \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456\
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=123456\
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_USER=nacos\
-e NACOS_PASSWORD=nacos\
-e JVM_XMS=512m \
-e JVM_XMX=512m \
-e JVM_XMN=256m \
-e JVM_MS=32m \
-e JVM_MMS=80m \
-p 3333:8848 \
nacos/nacos-server
//nacos-2
docker run \
--name nacos-2 \
--hostname=nacos-2 \
--restart=always \
--ip 172.17.0.4 \
-d \
-e NACOS_SERVERS=172.17.0.3:8848,172.17.0.4:8848,172.17.0.5:8848 \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456\
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=123456\
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_USER=nacos\
-e NACOS_PASSWORD=nacos\
-e JVM_XMS=512m \
-e JVM_XMX=512m \
-e JVM_XMN=256m \
-e JVM_MS=32m \
-e JVM_MMS=80m \
-p 4444:8848 \
nacos/nacos-server
//nacos-3
docker run \
--name nacos-3 \
--hostname=nacos-3 \
--restart=always \
--ip 172.17.0.5 \
-d \
-e NACOS_SERVERS=172.17.0.3:8848,172.17.0.4:8848,172.17.0.5:8848 \
-e MYSQL_SERVICE_HOST=172.17.0.2 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456\
-e MYSQL_MASTER_SERVICE_HOST=172.17.0.2 \
-e MYSQL_MASTER_SERVICE_PORT=3306 \
-e MYSQL_MASTER_SERVICE_DB_NAME=nacos_config \
-e MYSQL_MASTER_SERVICE_USER=root \
-e MYSQL_MASTER_SERVICE_PASSWORD=123456\
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 \
-e NACOS_USER=nacos\
-e NACOS_PASSWORD=nacos\
-e JVM_XMS=512m \
-e JVM_XMX=512m \
-e JVM_XMN=256m \
-e JVM_MS=32m \
-e JVM_MMS=80m \
-p 5555:8848 \
nacos/nacos-server
总结
碰到问题,查看docker logs 和翻译报错信息显得尤为重要
文档取消了mysql -master,但是显示连接错误,未解决
docker run -d --name nacos --restart=always \
-v /usr/local/web/nacos/logs:/home/nacos/logs \
-e MODE=standalone \
-e MYSQ_SERVICE_HOST=172.17.0.4 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQ_SERVICE_PASSWORD=aiMONEY157732 \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_DATABASE_NUM=1 -e NACOS_USER=nacos -e NACOS_PASSWORD=nacos \
-e JVM_XMS=512m -e JVM_XMX=512m \
-e JVM_XMN=256m -e JVM_MS=32m \
-e JVM_MMS=80m -p 8848:8848 nacos/nacos-server
使用1.1.4连接上,但是无法向数据库存入数据
variable “tx_isloation” 显然我们开了事务,mysql8.0 将 tx_isloation 换了个新名字 transcation_isloation(TM无聊),也是个明显驱动版本过低的问题。
根据网上的资料得知,异常由mysql-connector-java驱动包与数据库的版本不一致导致的。
本人采用的MySQL版本为 8.0.13,原先mysql-connector-java驱动包为5.1.6,故将驱动包升级至8.0.13,问题得到解决。
查询MySQL版本更新说明资料得知,原来旧版的 tx_read_only 系统变量被 transaction_read_only 代替。
然而我用的是docker最终更换mysql版本为5.7解决问题,小问题还是很坑的.
6.0驱动需要加cj
推荐用8.0
加一段docker的网络
前言:Docker的5种网络模式
Bridge
此时docker引擎会创建一个veth对,一端连接到容器实例并命名为eth0,另一端连接到指定的网桥中(比如docker0),因此同在一个主机的容器实例由于连接在同一个网桥中,它们能够互相通信。容器创建时还会自动创建一条SNAT规则,用于容器与外部通信时,类似家里上网用的ISP提供给我们的动态IP。如果用户使用了-p或者-P端口,还会创建对应的端口映射规则,使得外部请求能够访问容器的服务.
Host
与宿主机共享网络,此时容器没有使用网络的namespace,宿主机的所有设备,会暴露到容器中,因此存在安全隐患。
None
不设置网络,相当于容器内没有配置网卡,用户可以手动配置。
Container
指定与某个容器实例共享网络
Network
使用自定义网络,可以使用docker network create创建,并且默认支持多种网络驱动,用户可以自由创建桥接网络或者overlay网络。