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

 更新时间:2026年03月02日 09:12:33   作者:剽悍一小兔  
本次实践围绕 Docker 部署稳定可用的 Nacos 服务、开启登录鉴权、开放 gRPC 端口,并实现 SpringBoot 服务注册到 Nacos 展开,解决了版本兼容、鉴权配置、端口通信等核心问题,需要的朋友可以参考下

引言

本次实践围绕 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)云服务器安全组放行(重中之重)

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

  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 服务

  • 控制台验证:访问 http://服务器IP:8848/nacos,登录后在「服务管理→服务列表」能看到 user-manage 服务,状态为「健康」;
  • 端口验证:本地执行 telnet 服务器IP 9848curl -v telnet://服务器IP:9848,无「Connection refused」即为端口通。

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的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Docker部署war包项目的实现

    使用Docker部署war包项目的实现

    这篇文章主要介绍了使用Docker部署war包项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Docker 限制容器对内存的使用详解

    Docker 限制容器对内存的使用详解

    这篇文章主要介绍了Docker 限制容器对内存的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • docker内的容器如何与宿主机共享IP的方法

    docker内的容器如何与宿主机共享IP的方法

    本文主要介绍了docker内的容器如何与宿主机共享IP的方法,文中根据实例编码详细介绍的十分详尽,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 关于docker cgroups资源限制的问题

    关于docker cgroups资源限制的问题

    cgroups是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量,这篇文章主要介绍了docker cgroups资源限制,需要的朋友可以参考下
    2022-09-09
  • Docker CentOS7的系统上安装部署以及基础教程

    Docker CentOS7的系统上安装部署以及基础教程

    这篇文章主要介绍了Docker CentOS7的系统上安装部署以及基础教程的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker 容器全生命周期管理与运维命令实战演练

    Docker 容器全生命周期管理与运维命令实战演练

    本文将深入剖析 Docker 容器管理的二十余条核心命令,结合实际操作案例与执行结果,详细解读从容器创建、运行、调试到销毁的全过程,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Windows Docker 部署 SolrCloud的方法步骤

    Windows Docker 部署 SolrCloud的方法步骤

    本文主要介绍了Windows Docker 部署 SolrCloud的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Docker 下载镜像慢的问题解决办法

    Docker 下载镜像慢的问题解决办法

    这篇文章主要介绍了Docker 下载镜像慢的问题解决办法的相关资料,需要的朋友可以参考下
    2017-04-04
  • Dockerfile基础分享

    Dockerfile基础分享

    在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。今天我们主要来详细探讨下Dockerfile的一些基础。
    2017-01-01
  • 使用Dockerfile实现容器内部服务随容器自启动的方法

    使用Dockerfile实现容器内部服务随容器自启动的方法

    这篇文章主要介绍了使用Dockerfile实现容器内部服务随容器自启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06

最新评论