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下安装Elasticsearch设置账号密码的步骤记录

    docker下安装Elasticsearch设置账号密码的步骤记录

    这篇文章主要介绍了docker下安装Elasticsearch设置账号密码的步骤,包括拉取镜像、创建配置文件和用户密码文件、挂载文件到容器、使用Kibana或API创建用户、验证配置、以及持久化数据和日志,需要的朋友可以参考下
    2025-04-04
  • Docker部署Graylog日志管理系统

    Docker部署Graylog日志管理系统

    Graylog是一个开源的日志管理平台,支持强大的搜索功能,本文主要介绍了Docker部署Graylog日志管理系统,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Ubuntu Docker安装并使用的方法

    Ubuntu Docker安装并使用的方法

    最近在学习docker,本文就从入门开始介绍Ubuntu Docker安装并使用的方法,具有一定的参考价值,感兴趣的可以了解一下
    2021-09-09
  • Docker启动MySQL报错:/etc/mysql/conf.d目录缺失的解决方案

    Docker启动MySQL报错:/etc/mysql/conf.d目录缺失的解决方案

    这篇文章主要介绍了MySQL容器启动失败的原因及解决方法,MySQL在启动时会读取/etc/mysql/conf.d/目录下的配置文件,若该目录不存在或未正确挂载,会导致初始化失败,解决方法包括通过挂载目录、使用Dockerfile创建目录或临时绕过检查等,需要的朋友可以参考下
    2026-03-03
  • Docker环境搭建、阿里云镜像加速、常用命令使用及说明

    Docker环境搭建、阿里云镜像加速、常用命令使用及说明

    文章介绍了Docker的基本架构,包括容器、镜像和仓库的关系,详细说明了在CentOS系统下Docker的安装步骤,并讲解了如何配置阿里云镜像加速及常用的Docker命令操作
    2025-10-10
  • Docker部署RabbitMQ镜像的保姆级教程

    Docker部署RabbitMQ镜像的保姆级教程

    RabbitMQ 的镜像队列集群(Mirrored Queues Cluster)是实现高可用性的一种模式,它通过在集群中的多个节点之间复制队列,确保消息在集群的某些节点宕机时不会丢失,本文介绍了Docker部署RabbitMQ镜像的保姆级教程,需要的朋友可以参考下
    2024-12-12
  • Docker 存储管理的几种方式

    Docker 存储管理的几种方式

    本文主要使用三种不同的方式将数据从Docker主机挂载到容器中,分别为卷(volumes),绑定挂载(bind mounts),临时文件系tmpfs,还介绍了数据卷容器、数据卷的备份与恢复,对Docker 存储管理相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • Docker动态给容器Container暴露端口操作

    Docker动态给容器Container暴露端口操作

    这篇文章主要介绍了Docker动态给容器Container暴露端口操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • IDEA通过Docker插件部署SpringBoot项目的过程详解

    IDEA通过Docker插件部署SpringBoot项目的过程详解

    在idea中如何通过Docker插件部署SpringBoot项目呢?很多朋友在配置过程中走了很多误区,今天小编给大家分享一篇教程关于IDEA通过Docker插件部署SpringBoot项目的过程,感兴趣的朋友一起看看吧
    2021-11-11
  • docker基本命令及使用实例详解

    docker基本命令及使用实例详解

    这篇文章主要介绍了docker基本命令及使用实例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论