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}
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可以进行登录
5.重启测试
使用Mysql作为nacos容器存储目的就是防止重启nacos容器后配置丢失,在启动以后,可以添加一项配置,然后重启 nacos容器,重启后重新登录nacos,配置不丢失即视为成功。
参考文档:
https://developer.aliyun.com/article/972817