Docker启动nacos默认用的是内存数据库,重启docker容器以后,nacos配置会丢失,非常不方便。所以需要修改为使用Mysql作为nacos的存储。
1.数据库
创建mysql数据库,过程省略,将nacos 的mysql脚本在数据库中进行导入。
mysql脚本可以在nacos的容器中找到 /home/nacos/conf/ mysql-schema.sql
# 启动一个临时nacos容器
~] docker run --name nacos-server -e MODE=standalone -d nacos/nacos-server:v2.2.3
ed3b5a88a244
# 进入容器
~] docker exec -it ed3b5a88a244
# 找到mysql脚本
[root@ed3b5a88a244 conf]# pwd
/home/nacos/conf
[root@ed3b5a88a244 conf]# ls
1.4.0-ipv6_support-update.sql announcement.conf application.properties derby-schema.sql mysql-schema.sql nacos-logback.xml
2.目录映射
从临时nacos容器中复制配置文件、数据、log目录到映射目录
docker cp 9c37c28fd155:/home/nacos/conf /Users/domino/files/docker-data/nacos-mysql/
docker cp 9c37c28fd155:/home/nacos/logs /Users/domino/files/docker-data/nacos-mysql/
docker cp 9c37c28fd155:/home/nacos/data /Users/domino/files/docker-data/nacos-mysql/
3.修改配置
修改映射目录的application.properties配置文件
修改以下几个配置
# 数据源类型为 mysql
spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:mysql}
# 数据库 ip port name 等
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST:172.17.0.1}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME:nacos}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}
# 数据库用户名
db.user.0=${MYSQL_SERVICE_USER:root}
# 数据库密码
db.password.0=${MYSQL_SERVICE_PASSWORD:123456}
开启鉴权
# 开启鉴权功能
nacos.core.auth.enabled=true
# 关闭使用user-agent判断服务端请求并放行鉴权的功能
nacos.core.auth.enable.userAgentAuthWhite=false
# 配置自定义身份识别的key和value,这两个属性是auth的白名单,用于标识来自其它服务器的请求,具体实现见 com.alibaba.nacos.core.auth.AuthFilter。
nacos.core.auth.server.identity.key=authKey
nacos.core.auth.server.identity.value=shigzh
# 自定义用于生成JWT令牌的密钥,注意:原始密钥长度不得低于32字符,且一定要进行Base64编码,否则无法启动节点。
nacos.core.auth.plugin.nacos.token.secret.key=bmFjb3NfMjAyNDAxMTBfc2hpZ3poX25hY29zX3Rva2Vu
# 权限缓存开关,开启后权限缓存的更新默认有15秒的延迟,默认 : false
nacos.core.auth.caching.enabled=true
4.启动nacos容器
docker run -d -e MODE=standalone -p 8848:8848 -p 9848:9848 -v /Users/domino/files/docker-data/nacos-mysql/conf:/home/nacos/conf -v /Users/domino/files/docker-data/nacos-mysql/logs:/home/nacos/logs -v /Users/domino/files/docker-data/nacos-mysql/data:/home/nacos/data --name nacos-mysql --restart=always nacos/nacos-server:v2.2.3
PS:必须注意,有些文档只说配置8848端口,但是 2.x以上版本的nacos, 9848端口也是一定要配置的,否则可能会出现读取不到配置的情况,参考文档 https://blog.csdn.net/hmq1350167649/article/details/122432510
启动后,访问 http://localhost:8848/nacos 可以访问nacos首页,使用 nacos/nacos可以进行登录
![](https://i-blog.csdnimg.cn/blog_migrate/251b3fb85dd23ff6f455648001059c80.png)
5.重启测试
使用Mysql作为nacos容器存储目的就是防止重启nacos容器后配置丢失,在启动以后,可以添加一项配置,然后重启 nacos容器,重启后重新登录nacos,配置不丢失即视为成功。
6. 补充
使用docker-compose启动
docker-compose.yaml文件 ,使用docker-compose up -d命令启动, docker-compose down 停止
services:
nacos:
image: nacos/nacos-server:v2.2.3
container_name: nacos
ports:
- "8848:8848"
- "9848:9848"
environment:
- MODE=standalone
- MYSQL_SERVICE_HOST=10.4.7.124
- MYSQL_SERVICE_PORT=3309
- MYSQL_SERVICE_DB_NAME=nacos
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=123456
- NACOS_AUTH_IDENTITY_KEY=authKey
- NACOS_AUTH_IDENTITY_VALUE=shigzh
- NACOS_AUTH_TOKEN=bmFjb3NfMjAyNDAxMTBfc2hpZ3poX25hY29zX3Rva2Vu
- NACOS_AUTH_CACHE_ENABLE=true
volumes:
- /data/clx/nacos/conf:/home/nacos/conf
- /data/clx/nacos/logs:/home/nacos/logs
- /data/clx/nacos/data:/home/nacos/data
restart: always
参考文档:
https://developer.aliyun.com/article/972817
https://www.cnblogs.com/shigzh/p/17954917