docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker部署Nacos并接入SpringBoot

Docker部署Nacos并接入SpringBoot服务完整流程

作者:剽悍一小兔

本次实践围绕 Docker 部署稳定可用的 Nacos 服务、开启登录鉴权、开放 gRPC 端口,并实现 SpringBoot 服务注册到 Nacos 展开,解决了版本兼容、鉴权配置、端口通信等核心问题,需要的朋友可以参考下

引言

本次实践围绕 Docker 部署稳定可用的 Nacos 服务、开启登录鉴权、开放 gRPC 端口,并实现 SpringBoot 服务注册到 Nacos 展开,解决了版本兼容、鉴权配置、端口通信等核心问题,最终达成服务稳定运行与注册的目标,现将全流程总结如下:

一、核心选型:选择低版本 Nacos 规避鉴权坑

Nacos 3.1.x 版本鉴权逻辑改动大且兼容性问题多,2.2.x 版本鉴权配置复杂(需满足 Base64 密钥≥32 字节等严苛要求),最终选择 Nacos 2.0.4 版本(生产环境经典稳定版):

二、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,无需复杂的密钥配置:

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)云服务器安全组放行(重中之重)

若为阿里云/腾讯云/华为云服务器,需在控制台配置安全组:

  1. 进入服务器「安全组」模块,选择目标安全组;
  2. 新增入站规则:
    • 端口范围:8848/88489848/98489849/9849(或合并为 8848-9849);
    • 协议:TCP;
    • 来源:测试环境可设为 0.0.0.0/0,生产环境建议限制为业务服务器 IP;
  3. 保存规则,约 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 服务

2. 常见问题排查

问题现象核心原因解决方案
Client not connected, current status:STARTINGgRPC 端口未开放/配置地址加了 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

六、运维优化建议

  1. 日志管理:Nacos 日志挂载在 /opt/nacos/logs,定期清理超大日志(如 nacos.log),避免磁盘占满;
  2. 镜像清理:部署完成后清理多余 Nacos 镜像,仅保留 2.0.4 版本:
docker rmi $(docker images | grep nacos/nacos-server | grep -v "v2.0.4" | awk '{print $3}')
  1. 持久化配置:若需将 Nacos 配置持久化到 MySQL,可在 docker-compose.yml 中新增数据库连接参数(适用于生产环境);
  2. 端口安全:生产环境不建议将 8848/9848/9849 开放给所有 IP,仅放行业务服务器/办公网 IP。

总结

本次实践核心是「选对版本+极简配置+端口放行」:

  1. 版本选择上,Nacos 2.0.4 是兼顾稳定性与易用性的最优解,规避了高版本鉴权、集群选举等坑;
  2. 部署配置上,仅保留单机模式、登录鉴权核心参数,避免冗余配置引发的兼容问题;
  3. 通信保障上,完整放行 8848(主端口)、9848/9849(gRPC 端口),确保 SpringBoot 服务能正常注册;
  4. 版本兼容上,严格匹配 SpringCloud 与 Nacos 依赖版本,从根源解决连接、启动失败问题。

最终实现了 Nacos 稳定部署、登录鉴权生效、SpringBoot 服务无缝注册的目标,满足开发/生产环境的基础使用需求。

以上就是Docker部署Nacos并接入SpringBoot服务完整流程的详细内容,更多关于Docker部署Nacos并接入SpringBoot的资料请关注脚本之家其它相关文章!

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