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、創(chuàng)建日志文件夾
mkdir -p /home/nacos/logs/
3、創(chuàng)建配置文件夾
mkdir -p /home/nacos/init.d/
4、nacos數據庫導入
宿主機的mysql
新建nacos
的數據庫,并執(zhí)行腳本 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)日志提示成功,無法訪問
首先需要排查的就是端口,騰訊云阿里云的端口是否打開?寶塔面板或防火墻的端口是否打開?
其次需要排查的就是數據庫是否正確。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。