docker安装nacos与docker网络模式的了解

1、两个版本配置数据库
2、单机参考配置以及挂载配置文件

3、集群配置参考
4、nacos遇到的坑
5、没办法用单机

# 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网络。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值