Docker 环境下的 Nacos 持久化

本文介绍如何通过Docker搭建局域网并实现Nacos与MySQL的互联互通,详细讲解了Nacos持久化的步骤,包括创建Nacos专用数据库、配置Nacos连接MySQL的方法及验证配置的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nacos 持久化

(环境:Win10 + Docker)


1、搭建 Docker 局域网

  1. 创建局域网:

    PS C:\Users\xiaozy37528> docker network create myNetwork
    f26e19d32597aec0a762c2e7081f86de930aa885b90c983a78730af2a6a018e6
    
  2. 将 Nacos 和 MySQL 容器接入局域网:

    docker network connect myNetwork MyNacos
    docker network connect myNetwork mysql
    
  3. 查看局域网接入情况:

    PS C:\Users\xiaozy37528> docker network inspect myNetwork
    [
        {
            "Name": "myNetwork",
            "Id": "f26e19d32597aec0a762c2e7081f86de930aa885b90c983a78730af2a6a018e6",
            "Created": "2022-01-26T03:11:03.8063259Z",
            "Scope": "local",
            "Driver": "bridge",
            "EnableIPv6": false,
            "IPAM": {
                "Driver": "default",
                "Options": {},
                "Config": [
                    {
                        "Subnet": "172.19.0.0/16",
                        "Gateway": "172.19.0.1"
                    }
                ]
            },
            "Internal": false,
            "Attachable": false,
            "Ingress": false,
            "ConfigFrom": {
                "Network": ""
            },
            "ConfigOnly": false,
            "Containers": {
                "3cdb8945aa49aee996e12417a22260b8a5d7ed28d609a93dcd73bd82f0efe23c": {
                    "Name": "mysql",
                    "EndpointID": "1ece17d728f830bfd4420b6b5c9d34c1b12c0e2ccac6d263c88dfdb6934aa5e7",
                    "MacAddress": "02:42:ac:13:00:04",
                    "IPv4Address": "172.19.0.4/16",
                    "IPv6Address": ""
                },
                "c824254e2a94bd32a5c216a0978e4ef7959cce6331a9ac220d75debd4593666c": {
                    "Name": "nacos",
                    "EndpointID": "a2119d6c6742bd886ec19e910c207c20011e532d25f9f8afb0b2f59533fda13d",
                    "MacAddress": "02:42:ac:13:00:03",
                    "IPv4Address": "172.19.0.3/16",
                    "IPv6Address": ""
                }
            },
            "Options": {},
            "Labels": {}
        }
    ]
    
  4. 验证 Nacos 容器与 MySQL 容器能否互相 ping 通:

    (nacos ping mysql)

    # ping 172.19.0.4
    PING 172.19.0.4 (172.19.0.4) 56(84) bytes of data.
    64 bytes from 172.19.0.4: icmp_seq=1 ttl=64 time=0.123 ms
    64 bytes from 172.19.0.4: icmp_seq=2 ttl=64 time=0.048 ms
    64 bytes from 172.19.0.4: icmp_seq=3 ttl=64 time=0.041 ms
    64 bytes from 172.19.0.4: icmp_seq=4 ttl=64 time=0.058 ms
    --- 172.19.0.4 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3153ms
    rtt min/avg/max/mdev = 0.041/0.067/0.123/0.033 ms
    
    
    # ping mysql
    PING mysql (172.19.0.4) 56(84) bytes of data.
    64 bytes from mysql.myNetwork (172.19.0.4): icmp_seq=1 ttl=64 time=0.040 ms
    64 bytes from mysql.myNetwork (172.19.0.4): icmp_seq=2 ttl=64 time=0.045 ms
    64 bytes from mysql.myNetwork (172.19.0.4): icmp_seq=3 ttl=64 time=0.096 ms
    64 bytes from mysql.myNetwork (172.19.0.4): icmp_seq=4 ttl=64 time=0.066 ms
    --- mysql ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3117ms
    rtt min/avg/max/mdev = 0.040/0.061/0.096/0.024 ms
    

    (mysql ping nacos)

    # ping 172.19.0.2
    PING 172.19.0.2 (172.19.0.2) 56(84) bytes of data.
    64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.076 ms
    64 bytes from 172.19.0.2: icmp_seq=2 ttl=64 time=0.051 ms
    64 bytes from 172.19.0.2: icmp_seq=3 ttl=64 time=0.036 ms
    64 bytes from 172.19.0.2: icmp_seq=4 ttl=64 time=0.039 ms
    --- 172.19.0.2 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 100ms
    rtt min/avg/max/mdev = 0.036/0.050/0.076/0.017 ms
    
    
    # ping MyNginx
    PING MyNginx (172.19.0.2) 56(84) bytes of data.
    64 bytes from MyNginx.myNetwork (172.19.0.2): icmp_seq=1 ttl=64 time=0.037 ms
    64 bytes from MyNginx.myNetwork (172.19.0.2): icmp_seq=2 ttl=64 time=0.044 ms
    64 bytes from MyNginx.myNetwork (172.19.0.2): icmp_seq=3 ttl=64 time=0.066 ms
    64 bytes from MyNginx.myNetwork (172.19.0.2): icmp_seq=4 ttl=64 time=0.056 ms
    64 bytes from MyNginx.myNetwork (172.19.0.2): icmp_seq=5 ttl=64 time=0.068 ms
    --- MyNginx ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 133ms
    rtt min/avg/max/mdev = 0.037/0.054/0.068/0.013 ms
    

2、创建 Nacos 数据库

  1. 获取 Nacos 数据库创建脚本

    https://github.com/alibaba/nacos/blob/develop/config/src/main/resources/META-INF/nacos-db.sql

  2. MySQL 执行脚本创建数据库

    请添加图片描述

3、配置 Nacos 持久化

  1. 修改 Nacos 配置文件

    请添加图片描述

    spring.datasource.platform=mysql
    
    db.num=1
    db.url.0=jdbc:mysql://172.19.0.4:3306/nacos_test?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=123456
    
  2. 重启 Nacos

4、验证配置效果

  1. 打开控制面板

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AozJhn3t-1643259630162)(markdown/Nacos实战 - 持久化.assets/image-20220126162001106.png)]

    正常打开说明 Nacos 正常启动,如果之前有在 Nacos 上添加配置信息,可以发现配置信息现在看不到了,因为 Nacos 现在使用的是我们配置的 MySQL 数据库。

  2. 随便添加一些数据

    请添加图片描述

    请添加图片描述

  3. 检查数据是否被保存到 MySQL

    请添加图片描述

    数据成功保存到MySQL,说明 Nacos 持久化配置已经

### DockerNacos 数据持久化的配置方法 #### 1. 使用 MySQL 实现数据持久化 为了使 Nacos 的数据能够被持久化存储,通常会将其与外部数据库(如 MySQL)集成。以下是具体的配置步骤: - **创建 MySQL 数据库和表结构** 在开始之前,需要先在 MySQL 中手动创建一个名为 `nacos_config` 的数据库,并导入官方提供的 SQL 脚本文件来初始化表结构[^2]。该脚本可以在 Nacos GitHub 仓库中的 `db` 目录找到。 - **修改 `application.properties` 文件** 如果通过 Docker Compose 启动 Nacos,则可以通过挂载自定义的 `application.properties` 文件到容器内部的方式完成配置。具体路径通常是 `/home/nacos/conf/application.properties`。以下是一个典型的配置示例: ```properties spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://<MySQL_HOST>:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=<MYSQL_USER> db.password=<MYSQL_PASSWORD> ``` 替换 `<MySQL_HOST>`、`<MYSQL_USER>` 和 `<MYSQL_PASSWORD>` 为实际的 MySQL 连接信息[^4]。 #### 2. 编写 `docker-compose.yml` 文件 编写一个完整的 `docker-compose.yml` 文件用于启动 Nacos 并连接至 MySQL。以下是一个参考模板: ```yaml version: '3' services: mysql: image: mysql:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: nacos_config MYSQL_USER: nacos MYSQL_PASSWORD: nacos ports: - "3306:3306" volumes: - ./mysql/data:/var/lib/mysql - ./init.sql:/docker-entrypoint-initdb.d/init.sql nacos: image: nacos/nacos-server:v2.0.3 container_name: nacos depends_on: - mysql environment: MODE: cluster SPRING_DATASOURCE_PLATFORM: mysql DB_NUM: 1 DB_URL_0: jdbc:mysql://mysql:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true DB_USER: nacos DB_PASSWORD: nacos ports: - "8848:8848" volumes: - ./custom-configs/application.properties:/home/nacos/conf/application.properties ``` 上述配置中需要注意的是,环境变量部分已经包含了 MySQL 的连接参数以及 Nacos 所需的相关设置[^4]。 #### 3. 解决常见问题 如果按照上述方式仍然无法成功启动 Nacos 或者发现数据未正确持久化到 MySQL 中,可能的原因有以下几个方面: - **缺少必要的数据库和表结构**:确认是否已提前准备好所需的数据库及其对应的表结构[^2]。 - **网络通信障碍**:确保 Docker 容器之间可以互相访问,尤其是当多个服务运行在同一 compose 文件下的时候[^3]。 - **权限不足**:检查赋予给 Nacos 用户的权限是否足够支持其读写操作。 --- ### 总结 综上所述,要实现 Docker 环境Nacos 的数据持久化功能,关键是合理利用外部关系型数据库作为后台支撑,并妥善调整相关联的服务之间的交互逻辑[^1]。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值