emqx4.4.18使用docker-compose部署,从单机切换到集群模式,部署失败

emqx4.4.18版本从单机模式,切换到双节点模式,部署方式是docker-compose部署,
节点1的配置文件
emqx:
image: /library/emqx:4.4.18
container_name: emqx
environment:
- “EMQX_NAME=emqx”
- “EMQX_HOST=node1.emqx.io
- “EMQX_CLUSTER__DISCOVERY=static”
- “EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io,emqx@node2.emqx.io
- “EMQX_DASHBOARD__DEFAULT_USER__LOGIN=111”
- “EMQX_DASHBOARD__DEFAULT_USER__PASSWORD=22-#*-jW@Mill”
- “EMQX_ALLOW_ANONYMOUS=false”
restart: always
user: “${HOST_UID}:${HOST_GID}”
extra_hosts:
- “node1.emqx.io:192.168.112.xx”
- “node2.emqx.io:192.168.112.xx”
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
- 11883:11883
- 8081:8081
- 5369:5369
- 4370:4370
volumes:
- ./emqx/data:/opt/emqx/data
- ./emqx/log:/opt/emqx/log
healthcheck:
test: [“CMD”, “/opt/emqx/bin/emqx_ctl”, “status”]
interval: 5s
timeout: 25s
retries: 5

节点2的配置文件 emqx:
image:/library/emqx:4.4.18
container_name: emqx
environment:
- “EMQX_NAME=emqx”
- “EMQX_HOST=node2.emqx.io
- “EMQX_CLUSTER__DISCOVERY=static”
- “EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io,emqx@node2.emqx.io
其他都是一样的,目前的错误日志
emqx | 2026-07-02T04:03:04.455409+00:00 [warning] Ekka(AutoCluster): discovered nodes outside cluster: [‘emqx@node2.emqx.io’]
容器内执行 emqx ctl 返回Node ‘emqx@node1.emqx.io’ not responding to pings.
ERROR: node_is_not_running,但ping的node1.emqx.io这些节点都是通的,容器启动也是成功的,只是集群模式失败
哪位帮看下

ping node1.emqx.io 通只能说明 DNS/网络层通,不代表 Erlang 节点 emqx@node1.emqx.io 能握手。

environment:
  - "EMQX_NAME=emqx"
  - "EMQX_HOST=node1.emqx.io"
  - "EMQX_CLUSTER__DISCOVERY=static"
  - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io"
  - "EMQX_NODE__COOKIE=两台节点完全一样的值"

节点 2 只改 EMQX_HOST=node2.emqx.io,其他保持一致。EMQX_HOST 对应的地址必须能从另一个 EMQX 容器连到对方容器。
重点查三处:

  1. 不要直接带着单机模式的旧 ./emqx/data 改节点名启动。EMQX 4.x 的数据目录和节点名绑定在 /opt/emqx/data/mnesia/${NodeName},先备份旧数据,用空 data 起双节点验证。
  2. 两台节点的 node.cookie 必须一致。直接显式配置 EMQX_NODE__COOKIE,别依赖旧数据目录或默认值。
  3. 4.4 默认 ekka 模式不是靠普通 ICMP ping。节点间要放通 4370,以及 RPC stateless 端口 5370 + 节点名数字后缀。你现在映射了 5369,这个只有在 rpc.port_discovery=manualrpc.tcp_server_port=5369 时才对。
    先在两个容器里看实际监听:
docker exec emqx sh -lc 'ss -lntp | egrep "4370|5370|5369|4369"'

Ekka(AutoCluster): discovered nodes outside cluster 只说明发现了对方节点,还没成功加入集群。把下面几段贴出来更容易定位:

docker logs --tail=200 emqx
docker exec emqx sh -lc 'grep -E "node.name|node.cookie|cluster.discovery|cluster.static.seeds|rpc.port_discovery|rpc.tcp_server_port" /opt/emqx/etc/emqx.conf'
docker exec emqx emqx ctl status
docker exec emqx emqx ctl cluster status

4.4.18己经过了维护周期了,建议尽快升级更新到最新版本