Docker部署Nacos并接入SpringBoot服务完整流程
引言
本次实践围绕 Docker 部署稳定可用的 Nacos 服务、开启登录鉴权、开放 gRPC 端口,并实现 SpringBoot 服务注册到 Nacos 展开,解决了版本兼容、鉴权配置、端口通信等核心问题,最终达成服务稳定运行与注册的目标,现将全流程总结如下:
一、核心选型:选择低版本 Nacos 规避鉴权坑
Nacos 3.1.x 版本鉴权逻辑改动大且兼容性问题多,2.2.x 版本鉴权配置复杂(需满足 Base64 密钥≥32 字节等严苛要求),最终选择 Nacos 2.0.4 版本(生产环境经典稳定版):
- 鉴权配置极简,仅需 1 行参数即可开启登录;
- 单机模式下无多余集群选举警告,启动稳定;
- 与 SpringCloud 2021.0.5 版本高度兼容,适配 SpringBoot 2.7.x。
二、Docker 部署 Nacos 完整步骤
1. 基础目录准备
mkdir -p /opt/nacos/logs # 挂载日志目录,方便后续排查问题 cd /opt/nacos
2. 编写 docker-compose.yml(带登录鉴权)
services:
nacos:
image: nacos/nacos-server:v2.0.4
container_name: nacos
restart: always
# 映射核心端口:8848(主端口)、9848/9849(gRPC 通信端口)
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
environment:
- MODE=standalone # 单机模式(核心,避免集群选举警告)
- JVM_XMS=256m # 内存配置,避免内存不足启动失败
- JVM_XMX=256m
- NACOS_AUTH_ENABLE=true # 开启登录鉴权(默认账号/密码:nacos/nacos)
volumes:
- /opt/nacos/logs:/home/nacos/logs # 挂载日志目录,宿主机可直接查看
3. 启动 Nacos 容器
# 启动容器 docker-compose up -d # 验证启动状态(显示 Up 即为成功) docker-compose ps # 查看启动日志(确认无报错) docker-compose logs -f nacos
三、关键配置:开启登录鉴权与端口永久开放
1. 登录鉴权说明
Nacos 2.0.4 开启鉴权仅需 NACOS_AUTH_ENABLE=true,无需复杂的密钥配置:
- 访问控制台:
http://服务器IP:8848/nacos; - 默认账号/密码:
nacos/nacos; - 登录后建议在「权限控制→用户管理」修改默认密码,提升安全性。
2. 永久开放端口(防火墙+安全组)
Nacos 2.0+ 依赖 gRPC 协议(9848/9849 端口)实现服务注册通信,需双层放行:
(1)服务器防火墙永久放行(以 CentOS 为例)
# 放行 8848/9848/9849 端口,--permanent 表示永久生效 firewall-cmd --add-port=8848/tcp --permanent firewall-cmd --add-port=9848/tcp --permanent firewall-cmd --add-port=9849/tcp --permanent # 重载防火墙规则使配置生效 firewall-cmd --reload # 验证端口是否开放 firewall-cmd --list-ports | grep -E "8848|9848|9849"
(2)云服务器安全组放行(重中之重)
若为阿里云/腾讯云/华为云服务器,需在控制台配置安全组:
- 进入服务器「安全组」模块,选择目标安全组;
- 新增入站规则:
- 端口范围:
8848/8848、9848/9848、9849/9849(或合并为8848-9849); - 协议:TCP;
- 来源:测试环境可设为
0.0.0.0/0,生产环境建议限制为业务服务器 IP;
- 端口范围:
- 保存规则,约 1-2 分钟生效。
四、SpringBoot 服务注册到 Nacos 配置
1. 依赖配置(Maven)
需保证 SpringBoot、SpringCloud、SpringCloud Alibaba 版本兼容(以 SpringBoot 2.7.x 为例):
<!-- 版本管理(核心,避免依赖冲突) -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Nacos 注册中心 + 配置中心依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2. 应用配置(application.yml)
spring:
application:
name: user-manage # 服务名,注册到 Nacos 后显示的名称
cloud:
nacos:
discovery:
server-addr: 服务器IP:8848 # Nacos 地址(不要加 http://)
username: nacos # 登录账号(开启鉴权必填)
password: nacos # 登录密码(开启鉴权必填)
group: DEFAULT_GROUP # 默认分组,可自定义
namespace: public # 默认命名空间,可自定义
config:
server-addr: 服务器IP:8848 # 配置中心地址,与注册中心一致
username: nacos
password: nacos
file-extension: yaml # 配置文件格式
server:
port: 8080 # 应用端口
3. 启动类开启服务注册
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
// 核心注解:开启服务注册发现
@EnableDiscoveryClient
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}
五、验证与问题排查
1. 验证 Nacos 服务
- 控制台验证:访问
http://服务器IP:8848/nacos,登录后在「服务管理→服务列表」能看到user-manage服务,状态为「健康」; - 端口验证:本地执行
telnet 服务器IP 9848或curl -v telnet://服务器IP:9848,无「Connection refused」即为端口通。
2. 常见问题排查
| 问题现象 | 核心原因 | 解决方案 |
|---|---|---|
| Client not connected, current status:STARTING | gRPC 端口未开放/配置地址加了 http:// | 1. 放行 9848/9849 端口;2. 配置中去掉 http:// |
| 鉴权失败/登录报错 | 账号密码错误/鉴权参数缺失 | 确认 username/password 与 Nacos 一致,Nacos 2.0.4 仅需开启 NACOS_AUTH_ENABLE=true |
| 服务列表看不到但项目不报错 | 应用名未配置/命名空间不匹配 | 确保 spring.application.name 非空,namespace 与 Nacos 一致 |
| 依赖冲突报错 | SpringCloud 与 Nacos 版本不兼容 | 严格匹配 SpringCloud 2021.0.5 + SpringCloud Alibaba 2021.0.5.0 |
六、运维优化建议
- 日志管理:Nacos 日志挂载在
/opt/nacos/logs,定期清理超大日志(如nacos.log),避免磁盘占满; - 镜像清理:部署完成后清理多余 Nacos 镜像,仅保留 2.0.4 版本:
docker rmi $(docker images | grep nacos/nacos-server | grep -v "v2.0.4" | awk '{print $3}')
- 持久化配置:若需将 Nacos 配置持久化到 MySQL,可在 docker-compose.yml 中新增数据库连接参数(适用于生产环境);
- 端口安全:生产环境不建议将 8848/9848/9849 开放给所有 IP,仅放行业务服务器/办公网 IP。
总结
本次实践核心是「选对版本+极简配置+端口放行」:
- 版本选择上,Nacos 2.0.4 是兼顾稳定性与易用性的最优解,规避了高版本鉴权、集群选举等坑;
- 部署配置上,仅保留单机模式、登录鉴权核心参数,避免冗余配置引发的兼容问题;
- 通信保障上,完整放行 8848(主端口)、9848/9849(gRPC 端口),确保 SpringBoot 服务能正常注册;
- 版本兼容上,严格匹配 SpringCloud 与 Nacos 依赖版本,从根源解决连接、启动失败问题。
最终实现了 Nacos 稳定部署、登录鉴权生效、SpringBoot 服务无缝注册的目标,满足开发/生产环境的基础使用需求。
以上就是Docker部署Nacos并接入SpringBoot服务完整流程的详细内容,更多关于Docker部署Nacos并接入SpringBoot的资料请关注脚本之家其它相关文章!
相关文章
Windows Docker 部署 SolrCloud的方法步骤
本文主要介绍了Windows Docker 部署 SolrCloud的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-10-10


最新评论