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)日志提示成功,无法访问
首先需要排查的就是端口,腾讯云阿里云的端口是否打开?宝塔面板或防火墙的端口是否打开?
其次需要排查的就是数据库是否正确。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。