文章目录
-
- 前言
- 环境准备
- 第一步:拉取镜像
- 第二步:先跑一个临时容器(关键步骤)
-
- 2.1 启动临时容器
- 2.2 导出配置文件和数据
- 第三步:正式运行 Nacos 容器
-
- 3.1 删除临时容器
- 3.2 启动正式容器(带目录挂载)
- 第四步:解决 Derby 启动报错
-
- 4.1 认识两个重要文件
- 4.2 创建数据库并初始化
- 4.3 修改 Nacos 配置
- 4.4 重新启动
- 4.5 验证
- 总结

前言
作为一名 Java 开发者,Nacos 这个名字你一定不陌生。它是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。简单来说,它身兼两职:注册中心 + 配置中心。
传统的安装方式需要下载压缩包、解压、配置 JDK、启动脚本……光环境准备就够折腾一阵子了。而用 Docker 安装,一行命令就能把服务拉起来,省时省力。
本文将按以下流程安装:
环境准备
在开始之前,建议先创建一个工作目录,用于存放 Nacos 的配置文件、数据文件和日志。这样做的好处是:即使容器被删了,数据还在。
我在 E:\\docker 下创建了一个 空白的 nacos 文件夹:

第一步:拉取镜像
本文以 v2.2.3 版本为例。打开终端,执行:
docker pull nacos/nacos-server:v2.2.3
镜像拉完之后,验证一下:
docker images
如果列表中出现了 nacos/nacos-server 且 TAG 为 v2.2.3,说明下载成功。
小贴士:如果不指定版本号(即 docker pull nacos/nacos-server),Docker 默认拉取 latest 标签。但在生产环境中,强烈建议指定明确的版本号,避免因版本差异导致不可预期的问题。

第二步:先跑一个临时容器(关键步骤)
镜像拉好了,为什么不直接一步到位运行最终容器?这里有一个很常见的坑:你需要先把容器里的配置文件复制出来,否则等会儿做目录挂载时,宿主机上的空文件夹会把容器里的配置"覆盖"掉,导致 Nacos 启动失败。
所以正确的姿势是:先跑一个临时容器,把配置文件拷出来,再删掉它。
2.1 启动临时容器
docker run -d –name nacos –env MODE=standalone -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.2.3
各参数含义:
| -d | 后台运行容器(detached mode) |
| –name nacos | 给容器起个名字,方便后续操作 |
| –env MODE=standalone | 以单机模式运行。Nacos 支持单机模式和集群模式,开发/测试环境用单机就够了 |
| -p 8848:8848 | 将宿主机的 8848 端口映射到容器的 8848 端口(Nacos 默认端口) |
| -p 9848:9848 | 将 9848 端口映射出来,用于 gRPC 通信(Nacos 2.x 新增) |
执行后,用 docker ps 确认容器已经在跑。

此时访问 http://localhost:8848/nacos,你应该能看到 Nacos 的登录页面了。默认用户名和密码都是 nacos。
2.2 导出配置文件和数据
docker cp nacos:/home/nacos/conf E:\\docker\\nacos\\conf
docker cp nacos:/home/nacos/data E:\\docker\\nacos\\data
docker cp 的作用是把容器内部的文件拷贝到宿主机。这里我们把 conf 和 data 两个核心目录都导了出来。

复制成功后,可以打开对应文件夹,看看是否复制成功了:

第三步:正式运行 Nacos 容器
3.1 删除临时容器
docker rm -f nacos
-f 参数表示强制删除,即使容器正在运行。

3.2 启动正式容器(带目录挂载)
docker run -d –name nacos –privileged -e MODE=standalone -e JVM_XMX=300m -e JVM_XMS=300m -p 8848:8848 -p 9848:9848 -v E:\\docker\\nacos\\conf:/home/nacos/conf -v E:\\docker\\nacos\\data:/home/nacos/data -v E:\\docker\\nacos\\logs:/home/nacos/logs nacos/nacos-server:v2.2.3
对比临时容器,这里多了几个关键参数:
| –privileged | 以特权模式运行,赋予容器更高的系统权限 |
| -e JVM_XMX=300m | JVM 最大堆内存 300MB |
| -e JVM_XMS=300m | JVM 初始堆内存 300MB(与 Xmx 设成一样,避免 JVM 动态伸缩带来的性能开销) |
| -v 宿主机路径:容器路径 | 目录挂载,这是持久化的核心 |
为什么要挂载三个目录?
- conf:配置文件在外面,改配置不用进容器
- data:数据落盘到宿主机,容器删了数据还在
- logs:方便排查问题时直接看日志
至此,一个"正经"的 Nacos 单机环境就搭好了 🎉
第四步:解决 Derby 启动报错
正常来说,直接启动的话会启动不起来,翻看日志,发现报错:
load derby-schema.sql error
这是因为 Nacos 默认使用内嵌的 Derby 数据库,在某些环境下初始化会失败。解决方案很简单:换 MySQL。
4.1 认识两个重要文件
在 E:\\docker\\nacos\\conf 目录下,有两个文件需要关注:
- application.properties — Nacos 的主配置文件,在这里改数据库连接
- mysql-schema.sql — MySQL 初始化脚本,包含 Nacos 需要的所有表结构
4.2 创建数据库并初始化
用 Navicat(或其他工具)连上你的 MySQL,创建一个新库:
CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

然后,把 mysql-schema.sql 里的 SQL 全部执行一遍。这个脚本会创建以下核心表:
| config_info | 配置信息主表 |
| config_info_aggr | 聚合配置 |
| config_info_beta | Beta 版配置 |
| config_info_tag | 配置标签 |
| his_config_info | 配置变更历史 |
| tenant_info | 租户信息 |
| users / roles / permissions | 用户权限相关 |


脚本还贴心地插入了一条默认管理员记录:
- 用户名:nacos
- 密码:nacos(BCrypt 加密存储)
4.3 修改 Nacos 配置
编辑 E:\\docker\\nacos\\conf\\application.properties,找到数据库相关配置,改成这样:
spring.datasource.platform=mysql
db.url.0=jdbc:mysql://host.docker.internal:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
db.user.0=root
db.password.0=your_password
几点说明:
4.4 重新启动
保存配置后,删除旧容器,重新执行启动命令:
docker run -d –name nacos –privileged -e MODE=standalone -e JVM_XMX=300m -e JVM_XMS=300m -p 8848:8848 -p 9848:9848 -v E:\\docker\\nacos\\conf:/home/nacos/conf -v E:\\docker\\nacos\\data:/home/nacos/data -v E:\\docker\\nacos\\logs:/home/nacos/logs nacos/nacos-server:v2.2.3
这次因为配置文件已经指向了 MySQL,Nacos 启动后会连接 nacos_config 库,不再依赖内嵌的 Derby 数据库,启动报错自然就消失了。
4.5 验证
再次访问 http://localhost:8848/nacos,登录后进入「命名空间」菜单,试着新建一个命名空间。如果能正常创建,并且在 tenant_info 表中能看到新纪录,就说明一切正常 ✅


下次想启动nacos时,直接运行
docker start nacos
一劳永逸。
总结
回顾一下,整个安装流程其实就四步:
拉取镜像 → 跑临时容器拷配置 → 挂载目录正式运行 → 切 MySQL



