核心是集群模式+mysql持久化+全链路鉴权+docker网络互通:需创建专用nacos-cluster-net网络,拉取v2.4.3稳定镜像,三节点共用同一mysql并配置一致的nacos_auth_token(≥32字符base64编码)及identity密钥,手动补全cluster.conf集群地址,再通过nginx或内网slb统一代理访问。

用 Docker 部署高可用 Nacos 配置中心,核心是集群模式 + 持久化存储 + 鉴权加固 + 网络互通。单机容器只适合本地测试,生产必须集群,否则任一节点宕机即服务中断。
准备三节点专用网络与镜像
先创建隔离的 Docker 网络,确保节点间可直连:
- docker network create nacos-cluster-net
拉取官方镜像(推荐指定稳定版本,如 nacos/nacos-server:v2.4.3,避免 latest 带来不确定性):
- docker pull nacos/nacos-server:v2.4.3
不建议用 nacos-docker 仓库的 example yaml 直接启动——它默认使用 Derby 内存数据库,无法持久化,也不含生产级鉴权配置。
启动三个带 MySQL 和鉴权的 Nacos 节点
每个节点需连接同一套 MySQL(推荐 5.7+ 或 8.0),并启用完整鉴权。假设 MySQL 地址为 172.18.0.10:3306,数据库名 nacos_config:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 节点 1(映射宿主机 8848):
docker run -d --name nacos1 --net nacos-cluster-net \
-p 8848:8848 -p 9848:9848 \
-e MODE=cluster \
-e SPRING_PROFILES_ACTIVE=mysql \
-e MYSQL_SERVICE_HOST=172.18.0.10 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=your_mysql_pwd \
-e NACOS_AUTH_ENABLE=true \
-e NACOS_AUTH_TOKEN=ZmFrZV9zZWNyZXRfZm9yX25hY29zX2F1dGhfYmFzZTY0X2VuY29kZWQ= \
-e NACOS_AUTH_IDENTITY_KEY=server.identity.key \
-e NACOS_AUTH_IDENTITY_VALUE=server.identity.value \
-v $PWD/nacos1-logs:/home/nacos/logs \
nacos/nacos-server:v2.4.3 - 节点 2(映射宿主机 8849)和节点 3(映射宿主机 8850)同理,仅修改
-p映射端口和容器名,其余环境变量保持一致
注意:NACOS_AUTH_TOKEN 必须是 ≥32 字符原始密钥经 Base64 编码后的结果;NACOS_AUTH_IDENTITY_KEY/VALUE 用于节点间通信认证,所有节点必须完全一致。
配置集群通信与持久化
Docker 容器启动后,需进入每个容器手动补全集群地址(v2.4+ 版本暂不支持纯环境变量方式自动写入 cluster.conf):
- 执行 docker exec -it nacos1 bash
- 编辑 /home/nacos/conf/cluster.conf,写入三行(每行格式为
IP:PORT,IP 是该节点在nacos-cluster-net中的内网地址):
172.18.0.2:8848
172.18.0.3:8848
172.18.0.4:8848
(可用ip a查看容器实际 IP) - 退出并重启容器使配置生效:docker restart nacos1
MySQL 初始化脚本 mysql-schema.sql 需提前在数据库中执行,否则启动报错。脚本位于 Nacos 发行包 conf 目录或 GitHub release 页面。
接入层与访问控制
对外不暴露各节点直连地址,应统一走反向代理:
- 用 Nginx 做四层 TCP 代理,转发 8848(HTTP)和 9848(gRPC)端口到后端三个节点轮询
- 或部署内网 SLB(如阿里云私网 CLB),绑定域名如
nacos-prod.internal - Spring Boot 应用配置中只写代理地址:
spring.cloud.nacos.config.server-addr=nacos-prod.internal:8848
并启用基础认证:
spring.cloud.nacos.config.username=nacos
spring.cloud.nacos.config.password=your_admin_pwd
控制台首次访问会强制重置 admin 密码,之后所有客户端请求均需携带该账号凭证(或通过 Token 认证)。










