From e9120d22700f10795e63f7bfeb0d70661bd9b674 Mon Sep 17 00:00:00 2001 From: Toyas Date: Fri, 13 Mar 2026 18:02:31 +0800 Subject: [PATCH] fix(config): Correct Nacos container IP configuration --- docker-compose-node-01.yml | 7 ++++ docker-compose-node-02.yml | 7 ++++ docs/DEBIAN12-DEPLOYMENT-GUIDE.md | 56 +++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/docker-compose-node-01.yml b/docker-compose-node-01.yml index 83be585..d186710 100644 --- a/docker-compose-node-01.yml +++ b/docker-compose-node-01.yml @@ -184,6 +184,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 @@ -218,6 +219,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - MYSQL_HOST=mysql - MYSQL_PORT=3306 @@ -263,6 +265,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -302,6 +305,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -352,6 +356,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -391,6 +396,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -430,6 +436,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root diff --git a/docker-compose-node-02.yml b/docker-compose-node-02.yml index 74e42f1..c76d111 100644 --- a/docker-compose-node-02.yml +++ b/docker-compose-node-02.yml @@ -207,6 +207,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 @@ -236,6 +237,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -275,6 +277,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -314,6 +317,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -364,6 +368,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -403,6 +408,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root @@ -442,6 +448,7 @@ services: - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root diff --git a/docs/DEBIAN12-DEPLOYMENT-GUIDE.md b/docs/DEBIAN12-DEPLOYMENT-GUIDE.md index 1ea8918..a0161f5 100644 --- a/docs/DEBIAN12-DEPLOYMENT-GUIDE.md +++ b/docs/DEBIAN12-DEPLOYMENT-GUIDE.md @@ -617,6 +617,62 @@ environment: - MYSQL_SERVICE_DB_NAME=nacos_config ``` +### Q11: RocketMQ Broker 启动失败报 NullPointerException + +**问题描述**:RocketMQ Broker 启动时报错: +``` +java.lang.NullPointerException + at org.apache.rocketmq.broker.schedule.ScheduleMessageService.configFilePath +``` + +**原因**: +1. Docker 命名卷权限问题:官方镜像以 `rocketmq` 用户 (UID 3000) 运行,但命名卷默认属于 root +2. 存储路径配置问题:`delayOffsetStorePath` 等路径指向不存在的子目录 + +**解决方案**: + +1. 在 docker-compose 中添加 `user: root`: +```yaml +rmqbroker: + image: apache/rocketmq:5.1.4 + user: root # 添加此行 + container_name: rmqbroker +``` + +2. 清理旧数据并重启: +```bash +docker compose -f docker-compose-node-02.yml rm -f -s rmqbroker +docker volume rm ha-ovp_rmqbroker_store ha-ovp_rmqbroker_logs +docker compose -f docker-compose-node-02.yml up -d rmqbroker +``` + +### Q12: Nacos 服务注册显示 Docker 内部 IP(假高可用问题) + +**问题描述**: +- Nacos 控制台显示服务实例 IP 为 `172.18.0.x` 等 Docker 内部 IP +- 同一服务在不同节点只显示 1 个实例(IP 冲突覆盖) +- 跨节点服务调用失败 + +**原因**:Docker 桥接网络中,每个容器获得内部虚拟 IP。微服务使用容器 IP 注册到 Nacos,导致: +1. 不同节点的容器可能获得相同 IP,Nacos 认为是同一实例 +2. Gateway 无法通过容器内部 IP 访问其他节点的服务 + +**解决方案**:在 docker-compose 中添加 `SPRING_CLOUD_NACOS_DISCOVERY_IP` 环境变量: + +```yaml +# Node-01 (192.168.1.101) +video-gateway: + environment: + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101} + +# Node-02 (192.168.1.102) +video-gateway: + environment: + - SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.102} +``` + +**验证**:重启微服务后,Nacos 控制台应显示真实宿主机 IP(如 `192.168.1.101:9000`、`192.168.1.102:9000`) + --- ## 七、日常运维