Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

时间:2024-04-29 01:55:15

1. 拉取nacos-server镜像

进入 Docker Hub 查看nacos-server最新版本为 nacos-server:1.4.0

Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

配置阿里云镜像加速

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g6jp4cfd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload

拉取最新版本镜像(1.4.0)

docker pull nacos/nacos-server

2. 创建数据库

MySQL创建数据库名为nacos_config并导入官方脚本

nacos-db.sql

3. 创建挂载

在宿主机创建日志目录和配置文件

    mkdir -p /home/nacos/logs
mkdir -p /home/nacos/init.d
vim /home/nacos/init.d/custom.properties

4. 创建和启动容器

    docker run -d  --name nacos --restart=always --net=host \
-e MODE=standalone \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST= 101.37.69.49 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \
-e MYSQL_DATABASE_NUM=1 \
-v /home/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties \
-v /home/nacos/logs:/home/nacos/logs \
nacos/nacos-server

具体配置参数请参考 Nacos官方文档

如果启动容器失败,请在宿主机目录 /home/nacos/logs 查看日志。

到这里就完成了nacos-server应用的部署了,可以通过链接进入到Nacos控制台。

注意:

--net=host 指定Docker容器的网络模式为Host和宿主机在同一个网络,而不是默认的Bridge桥接模式,所以不指定端口的映射 -p 8848:8848。

至于为什么没有使用Bridge网络模式,中间是有些插曲的,先申明下我使用的云服务器是UCloud家的。

最开始使用的Bridge模式,创建和启动容器之后,然后关闭了内外网防火墙,访问Nacos控制台准备截图时。

原以为,实指望,谁料想,怎奈何。这十二个字,写尽了所有我的悲伤。

啊,我怎么访问不到~

在我的电脑telnet端口8848同样没反应,内网防火墙完全关闭的,自然就想着甩锅到UCloud上,配置的外网防火墙的开放端口没有生效吧。然后快到半夜给UCloud提交了个工单~这里不得不说UCloud技术售后是真的好,这个点提交不到一分钟就给回复了。

Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

得到的结果就是UCloud云服务器不支持tcp6的监听(也就是不支持ipv6)。而使用Bridge模式启动的容器默认只开启了tcp6的监听,所以就导致无法访问应用的问题。

Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

所以就想办法看能不能开启容器的tcp4监听咯,其实搜索下docker、tcp6、监听无法访问 等关键词会发现很多类似的问题,系统是Centos 8.0,试用了好几个方案都不可行。不知道配置才能使Docker容器开启tcp4的监听,所以也在这里问一下各位童鞋,麻烦知道的告知一下。

最后没辙,只能选择Host模式来避开docker-proxy映射的端口监听默认是tcp6的问题。

以下是使用 --net = host 设置网络为Host模式的端口监听信息

Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

4. Nacos应用测试

访问: http://106.75.231.227:8848/nacos

用户名/密码: nacos/nacos

Linux下使用Docker部署nacos-server(单机模式),丧心病狂的我在半夜给UCloud提交了一份工单

5. 总结

youlai-mall (Spring Cloud +Spring Cloud Alibaba + Vue 前后端分离一套商城项目) 暂处于开发阶段,并没有部署到线上,大家只能在本地搭建看到效果,其实挺不方便的,所以准备在云服务器部署一套环境。但没成想,一件很容易的事情居然耽误了那么久的时间,仅仅是因为UCloud云服务器不支持tcp6的监听,但是另外几台阿里云的服务器不会在使用Docker的过程中有这样的问题。所以写了这篇文章希望能帮助到各位童鞋少走点弯路。

最后附上项目往期系列文章,对项目有兴趣的小伙伴欢迎随时联系我(微信号:haoxianrui)~

附:往期文章链接

后端

  1. Spring Cloud实战 | 第一篇:Windows搭建Nacos服务
  2. Spring Cloud实战 | 第二篇:Spring Cloud整合Nacos实现注册中心
  3. Spring Cloud实战 | 第三篇:Spring Cloud整合Nacos实现配置中心
  4. Spring Cloud实战 | 第四篇:Spring Cloud整合Gateway实现API网关
  5. Spring Cloud实战 | 第五篇:Spring Cloud整合OpenFeign实现微服务之间的调用
  6. Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权
  7. Spring Cloud实战 | 最七篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案
  8. Spring Cloud实战 | 最八篇:Spring Cloud +Spring Security OAuth2+ Vue前后端分离模式下无感知刷新实现JWT续期
  9. Spring Cloud实战 | 最九篇:Spring Security OAuth2认证服务器统一认证自定义异常处理

管理前端

  1. vue-element-admin实战 | 第一篇: 移除mock接入后台,搭建有来商城youlai-mall前后端分离管理平台
  2. vue-element-admin实战 | 第二篇: 最小改动接入后台实现根据权限动态加载菜单

微信小程序

  1. vue+uniapp商城实战 | 第一篇:【有来小店】微信小程序快速开发接入Spring Cloud OAuth2认证中心完成授权登录