Docker 部署 Nacos
本文介绍通用的 Nacos 3.x 容器部署方法,不依赖任何业务项目。示例使用内置存储的单机模式,适合本地开发和受控测试环境;生产环境应采用集群模式、外部数据库和完整鉴权配置。
版本与前置条件
- 安装 Docker Engine 与 Docker Compose v2。
- 本文示例固定为稳定版 Nacos
3.2.3。上线前应检查 Nacos 发布说明、镜像标签和客户端兼容性。 - Nacos 3.x 服务端基于 Java 17,但官方容器镜像已包含所需运行时。
- Nacos 是内部基础设施组件,应部署在隔离网络中,不应直接暴露到公网。
生成鉴权参数
不要使用示例弱口令。先生成随机值,并妥善保存:
# JWT 密钥:先生成至少 32 字节随机值,再进行 Base64 编码
openssl rand -base64 48
# 服务端身份 Key 与 Value
openssl rand -hex 16
openssl rand -hex 32
将结果写入 .env:
NACOS_VERSION=v3.2.3
NACOS_AUTH_TOKEN=replace-with-base64-secret
NACOS_AUTH_IDENTITY_KEY=replace-with-random-identity-key
NACOS_AUTH_IDENTITY_VALUE=replace-with-random-identity-value
不要提交 .env。生产环境优先使用 Secret 管理服务,而不是普通环境变量。
单机 Compose 示例
compose.yaml:
services:
nacos:
image: nacos/nacos-server:${NACOS_VERSION}
restart: unless-stopped
ports:
# Nacos 3 控制台
- "127.0.0.1:8080:8080"
# 客户端 HTTP API
- "127.0.0.1:8848:8848"
# 客户端 gRPC
- "127.0.0.1:9848:9848"
environment:
MODE: standalone
PREFER_HOST_MODE: hostname
NACOS_AUTH_ENABLE: "true"
NACOS_AUTH_TOKEN: ${NACOS_AUTH_TOKEN}
NACOS_AUTH_IDENTITY_KEY: ${NACOS_AUTH_IDENTITY_KEY}
NACOS_AUTH_IDENTITY_VALUE: ${NACOS_AUTH_IDENTITY_VALUE}
JVM_XMS: 512m
JVM_XMX: 512m
JVM_XMN: 256m
volumes:
- nacos-data:/home/nacos/data
- nacos-logs:/home/nacos/logs
volumes:
nacos-data:
nacos-logs:
启动:
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=200 nacos
日志出现 Nacos started successfully 后,访问 http://127.0.0.1:8080/index.html,首次进入控制台时按提示初始化管理员密码。
健康与功能验证
先检查就绪状态:
curl --fail http://127.0.0.1:8848/nacos/v1/console/health/readiness
再检查容器状态和错误日志:
docker compose ps
docker compose logs --since=10m nacos
docker stats
Nacos 3 的管理 API 默认需要访问令牌。进行配置发布等操作时,应先通过登录 API 获取令牌,并避免把用户名、密码或令牌保存在 shell 历史和脚本中。
持久化、备份与升级
示例中的 nacos-data 和 nacos-logs 是命名卷。单机内置存储只能用于开发和测试,不应被当作生产高可用方案。
生产部署应:
- 使用官方
nacos-docker集群示例作为起点,并根据当前版本支持矩阵选择外部数据库。 - 按目标版本提供的数据库 schema 和升级脚本初始化或迁移,不要复用旧教程中的 SQL。
- 同时备份外部数据库、关键配置和鉴权材料,并定期验证恢复流程。
- 升级前阅读版本说明,验证服务端与客户端兼容性,再逐节点升级集群。
安全与网络边界
- 仅向受信网络开放控制台、HTTP API 和 gRPC 端口;公网访问应通过 VPN、零信任网关或其他受控入口。
- 鉴权只能减少误用风险,不能代替网络隔离、TLS、最小权限和审计。
- 集群模式下只允许节点间必要流量,并确保服务端身份参数在所有节点一致。
- 监控 JVM、连接数、配置推送延迟、服务实例数量和数据库状态。
停止与清理
# 保留数据卷
docker compose down
# 查看相关数据卷
docker volume ls --filter name=nacos
只有确认数据不再需要时才执行 docker compose down --volumes;该命令会删除单机存储和日志卷。