docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker安装Nacos单机(配合宝塔)

Docker安装Nacos单机的实现方式(配合宝塔)

作者:若水印象

这篇文章主要介绍了Docker安装Nacos单机的实现方式(配合宝塔),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、事前准备

CentOs系统,安装了宝塔面板,安装了docker,云平台防火墙里开放8848端口,官网地址

宝塔-安全放行8848端口

记得使用firewall-cmd --list-port 查看一下linux有没有开放nacos的8848端口,未开启的需要在宝塔里开启或通过命令行开启。

当前我的是开放了8848端口,如果小伙伴没有开放呢,可以使用开启,–permanent表示永久有效,如果不加当前命令,表示重启后就不生效了。宝塔开启也是可以的。

firewall-cmd --zone=public --add-port=8848/tcp --permanent

开放后记得重启防火墙

firewall-cmd --reload

二、安装

1、镜像仓库中拉取最新版本

https://hub.docker.com/r/nacos/nacos-server

docker pull nacos/nacos-server

2、创建日志文件夹

mkdir -p /home/nacos/logs/

3、创建配置文件夹

mkdir -p /home/nacos/init.d/

4、nacos数据库导入

宿主机的mysql新建nacos的数据库,并执行脚本 sql脚本地址如下:

https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql

5、运行nacos

docker run \
--name nacos -d \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:9849 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=172.17.0.1 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos \
-e MYSQL_SERVICE_USER=nacos \
-e MYSQL_SERVICE_PASSWORD=JTbMMN8k4rHh3N8z \
-v /root/apply/docker/apply/nacos/logs:/home/nacos/logs \
-v /root/apply/docker/apply/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /root/apply/docker/apply/nacos/data:/home/nacos/data \
nacos/nacos-server

解读

docker 启动容器
docker run \

容器名称叫nacos -d后台运行
--name nacos -d \

nacos默认端口8848 映射到外部端口8848
-p 8848:8848 \

naocs 应该是2.0版本以后就需要一下的两个端口 所以也需要开放
-p 9848:9848 
-p 9849:9849 
--privileged=true \

docker重启时 nacos也一并重启
--restart=always \

-e 配置 启动参数
配置 jvm
-e JVM_XMS=256m 
-e JVM_XMX=256m \

单机模式
-e MODE=standalone 
-e PREFER_HOST_MODE=hostname \

数据库是mysql 配置持久化 不使用nacos自带的数据库
-e SPRING_DATASOURCE_PLATFORM=mysql \

写自己的数据库地址
-e MYSQL_SERVICE_HOST=###### \

数据库端口号
-e MYSQL_SERVICE_PORT=3306 \

mysql的数据库名称
-e MYSQL_SERVICE_DB_NAME=nacos \

mysql的账号密码
-e MYSQL_SERVICE_USER=root 
-e MYSQL_SERVICE_PASSWORD=root \

-v 映射docker内部的文件到docker外部 我这里将nacos的日志 数据 以及配置文件 映射出来
映射日志
-v /root/apply/docker/apply/nacos/logs:/home/nacos/logs \

映射配置文件 (应该没用了 因为前面已经配置参数了)
-v /root/apply/docker/apply/nacos/init.d/custom.properties:/etc/nacos/init.d/custom.properties \

映射nacos的本地数据 也没啥用因为使用了mysql
-v /root/apply/docker/apply/nacos/data:/home/nacos/data \

启动镜像名称
nacos/nacos-server

三、常见问题

1、数据库配置

如果数据库是rds这种公网可以访问的数据库,直接写就可以

如果数据库在宿主机

docker里面的代码生成的数据需要写入到宿主机的Mysql服务器上,想要用本地的数据库测试自己的代码正确性,项目程序安装在docker容器中,于是必定要在docker容器里访问到本地的数据库。

(1)在docker容器里localhost并不是指宿主机的localhost,因此不能在容器中通过localhost:3306访问到宿主机的mysql,也不可以通过127.0.0.1访问。

(2)docker在运行时就建立了虚拟网卡,并命名为docker0,可以在宿主机上运行ifconfig看到它,这就是宿主机建立的网桥,用于与各个容器之间通信。

[root@VM-8-15-centos ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:53ff:fed0:4c11  prefixlen 64  scopeid 0x20<link>
        ether 02:42:53:d0:4c:11  txqueuelen 0  (Ethernet)
        RX packets 4489  bytes 6944799 (6.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3379  bytes 999348 (975.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

(3)宿主机在与容器同一局域网的IP地址一般是docker0对应的IP地址段的首个地址(如172.17.0.1),因此,可以在容器里通过172.17.0.1:3306访问到宿主机的mysql服务器。

mysql服务器默认的设置为允许127.0.0.1段的ip地址访问

如果用172.17.0.1:3306仍然无法访问到宿主机的话,需要设置一下mysql的访问权限:

如果用的是宝塔面板,可以给nacos这个数据库设置权限为所有人

 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '12345678' WITH GRANT OPTION;
 mysql>flush privileges;
// 其中各字符的含义:
// *.* 对任意数据库任意表有效
// "root" "12345678" 是数据库用户名和密码
// '%' 允许访问数据库的IP地址,%意思是任意IP,也可以指定IP
// flush privileges 刷新权限信息

2、如何查看是否安装成功

1)安装后访问地址,有登录页面就是安装成功了,默认用户名和密码都是nacos

​ http://XXX.XXX.XXX.XXX:8848/nacos

2)宝塔面板点击左侧docker点击右侧nacos的日志来看是否正确运行,如果正确运行后是有如下字样的

2022-12-15 09:46:53,339 INFO Nacos started successfully in stand alone mode. use external storage

2022-12-15 09:47:15,057 INFO Initializing Servlet 'dispatcherServlet'

2022-12-15 09:47:15,090 INFO Completed initialization in 32 ms

3)日志提示成功,无法访问

首先需要排查的就是端口,腾讯云阿里云的端口是否打开?宝塔面板或防火墙的端口是否打开?

其次需要排查的就是数据库是否正确。

3)日志提示成功,无法访问

首先需要排查的就是端口,腾讯云阿里云的端口是否打开?宝塔面板或防火墙的端口是否打开?

其次需要排查的就是数据库是否正确。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文