version: '3'
services:
emqx1:
image: emqx/emqx:5.8.9
container_name: emqx1
network_mode: host
environment:
- "EMQX_NODE__COOKIE=emqx-cluster-2026-secret"
- "EMQX_NODE__NAME=emqx1@192.168.0.97"
- "EMQX_NODE_IP=192.168.0.97"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx1@192.168.0.97,emqx2@192.168.0.97]"
- "EMQX_RPC__PORT_DISCOVERY=manual"
- "EMQX_RPC__TCP_SERVER_PORT=5370"
- "EMQX_NODE__DIST_LISTEN_PORT=4370"
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx", "ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
# networks:
# emqx-bridge:
# aliases:
# - node1.emqx.io
ports:
- 1883:1883
- 8083:8083
- 8086:8084
- 8883:8883
- 18083:18083
- 4370:4370
- 5370:5370
# volumes:
# - $PWD/emqx1_data:/opt/emqx/data
dockerexec -it emqx1sh-c"emqx ctl cluster status"Node ‘emqx@192.168.0.97’ not responding to pings.
端口都开放了,使用了 emqx/emqx:5.8.8、 emqx/emqx:5.8.9 、emqx/emqx:5.7.2的镜像都报这个问题,容器内部是可以ping通192.168.0.97
期望得到技术支持
version: '3'
services:
emqx1:
image: emqx/emqx:5.8.9
container_name: emqx1
environment:
- "EMQX_NODE_NAME=emqx@192.168.202.74"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx@192.168.0.97,emqx@192.168.202.74]"
- "EMQX_NODE__COOKIE=BusClusterSec_20260612"
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx", "ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
networks:
emqx-bridge:
aliases:
- node2.emqx.io
ports:
- 1883:1883
- 8083:8083
- 8883:8883
- 18083:18083
- 4370:4370
# - 4369:4369
# volumes:
# - $PWD/emqx2_data:/opt/emqx/data
emqx2:
image: emqx/emqx:5.8.9
container_name: emqx2
environment:
- "EMQX_NODE_NAME=emqx2@192.168.202.74"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS=[emqx2@192.168.0.97,emqx2@192.168.202.74]"
- "EMQX_NODE__COOKIE=BusClusterSec_20260611"
- "EMQX_RPC__TCP_SERVER_PORT=5370"
- "ERL_EPMD_DIST_PORT=4371"
- "EMQX_RPC__PORT_DISCOVERY=manual"
- "ERL_DIST_ADDR=0.0.0.0"
# 强制dist套接字绑定宿主机网卡192.168.202.74
- "ERL_ARGS=-kernel inet_dist_use_interface {192,168,202,74}"
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx", "ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
networks:
emqx-bridge:
aliases:
- node1.emqx.io
ports:
- 1884:1883
- 8084:8083
# - 8084:8084
- 8884:8883
- 18084:18083
# epmd共用4369,dist、rpc错开
# - 4369:4369
- 4371:4371
- 5370:5370
# volumes:
# - $PWD/emqx1_data:/opt/emqx/data
networks:
emqx-bridge:
driver: bridge
现在默认端口的通了,分别在A、B两台机器上部署 emqx1与emqx2 ,B机器上的emqx1与A机器上的emqx1建立集群成功,B机器上的emqx1日志如下,因为A机器是在WSL中部署的docker部署的服务就不展示日志了因为其网络也是ping不通。
^Croot@pigsty:~/test/emqx# docker logs -f emqx1
EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds]: [...]
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds.2]: emqx@192.168.202.74
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds.1]: emqx@192.168.0.97
EMQX_CLUSTER__DISCOVERY_STRATEGY [cluster.discovery_strategy]: static
EMQX_NODE__COOKIE [node.cookie]: ******
EMQX_NODE__NAME [node.name]: emqx@192.168.202.74
2026-06-15T08:03:49.963753+00:00 [error] ** Connection attempt from node 'emqx@192.168.202.12' rejected. Invalid challenge reply. **
Listener tcp:default on 0.0.0.0:1883 started.
Listener ssl:default on 0.0.0.0:8883 started.
Listener ws:default on 0.0.0.0:8083 started.
Listener wss:default on 0.0.0.0:8084 started.
Listener http:dashboard on :18083 started.
EMQX 5.8.9 is running now!
2026-06-15T08:03:51.608198+00:00 [warning] msg: Stopping mria, reason: join
Stop listener http:dashboard on :18083 successfully.
Listener tcp:default on 0.0.0.0:1883 stopped.
Listener ssl:default on 0.0.0.0:8883 stopped.
Listener ws:default on 0.0.0.0:8083 stopped.
Listener wss:default on 0.0.0.0:8084 stopped.
Listener tcp:default on 0.0.0.0:1883 started.
Listener ssl:default on 0.0.0.0:8883 started.
Listener ws:default on 0.0.0.0:8083 started.
Listener wss:default on 0.0.0.0:8084 started.
Listener http:dashboard on :18083 started.
2026-06-15T08:03:57.245741+00:00 [error] ** Connection attempt from node 'emqx@192.168.202.12' rejected. Invalid challenge reply. **
^Croot@pigsty:~/test/emqx# docker exec -it emqx1 sh -c “emqx ctl cluster status”
Cluster status: #{running_nodes => [‘emqx@192.168.0.97’,‘emqx@192.168.202.74’],
stopped_nodes => }
A机器的emqx2与B机器上的emqx2建立集群则失败日志如下 :
root@pigsty:~/test/emqx# docker logs -f emqx2
EMQX_RPC__TCP_SERVER_PORT [rpc.server_port]: 5370
EMQX_RPC__PORT_DISCOVERY [rpc.port_discovery]: manual
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds]: [...]
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds.2]: emqx2@192.168.202.74
EMQX_CLUSTER__STATIC__SEEDS [cluster.static.seeds.1]: emqx2@192.168.0.97
EMQX_CLUSTER__DISCOVERY_STRATEGY [cluster.discovery_strategy]: static
EMQX_NODE__COOKIE [node.cookie]: ******
EMQX_NODE__NAME [node.name]: emqx2@192.168.202.74
Listener tcp:default on 0.0.0.0:1883 started.
Listener ssl:default on 0.0.0.0:8883 started.
Listener ws:default on 0.0.0.0:8083 started.
Listener wss:default on 0.0.0.0:8084 started.
Listener http:dashboard on :18083 started.
EMQX 5.8.9 is running now!
^Croot@pigsty:~/test/emqx# docker exec -it emqx2 sh -c "emqx ctl cluster status"
Node 'emqx2@192.168.202.74' not responding to pings.
补充 :A机器是weindows中通过WSL部署的docker然后在其中部署的emqx1与emqx2其里面的节点也是一直报 not responding to pings. 查询资料说是其网络特殊。B机器是debian中部署的docker其中的emqx1节点是可以与A中的emqx1节点建立集群的。期望实现 :A机器分别部署多个节点分别于B中的多个节点分别建议双主互相同步。
谢谢!
这应该和 emqx 部署无关,看着更像是网络方面的配置有问题,我也不太懂 docker 里面的网络。你还得自己探索一下。
您好,emqx有配置通讯端口的环境变量么 比如通讯端口默认的4369与4371想映射为其他端口,有相关环境变量支撑配置么
咨询一下集群之间通讯的端口是多少是必须固定的还是可以自定义
开源版与企业版分别是否支持实现这种场景,A宿主机服务器通过docker分别部署A1、A2、A3三个emqx容器,B宿主机 服务器通过docker分别部署B1、B2、B3三个emqx容器.A1与B1、A2与B2、A3与B3分别建立双主的场景实现。
tomato
2026 年6 月 23 日 07:31
11
可以明确是否支持实现上述场景么,不支持的话就不死磕了,现在测试下来只有一组可以正常建立双主其他两组建立不起来,谢谢,帮忙从理论上明确一下
tomato
2026 年6 月 23 日 07:47
13
怎么配置可以试一下,这个5369端口还有4370,4371 自定义后,B2如何识别A1的自定义通讯端口,有环境变量可以配置么
tomato
2026 年6 月 23 日 08:12
14
EMQX_RPC__PORT_DISCOVERY=manual
EMQX_RPC__TCP_SERVER_PORT=5370 有类似配置5370这样的端口环境变量么
不要按“自定义端口映射”配置,集群端口是从 node.name 推导的,static.seeds 里也不能写端口。
B2 识别 A1 的方式只有 node@host,不是 host:port:
EMQX_CLUSTER__STATIC__SEEDS=[emqx1@a-host,emqx1@b-host]
端口规则是固定的:
Erlang 分布式端口:4370 + 节点名前缀里的数字后缀,emqx@host 是 4370,emqx1@host 是 4371,emqx2@host 是 4372。
集群 RPC:Docker 场景文档里是 5369;普通部署是 5370 + offset。
static.seeds 不会携带端口,所以把容器内 5369/437x 映射成宿主机任意端口,远端节点不会知道。
所以你这个 A 宿主机跑 A1/A2/A3、B 宿主机跑 B1/B2/B3,再分别跨宿主机组 3 套双节点集群,如果所有节点都用同一个宿主机 IP,只靠 Docker -p 改端口,基本走不通。
要试只能满足这几个条件:
每个 EMQX 节点有独立、对端可直连的地址,node.name 的 host 部分要从所有对端解析到这个节点本身,不是同一个宿主机 IP。
不做任意端口 NAT,开放 EMQX 按节点名推导出来的集群端口。
同一组集群的 node.cookie 一致,不同组最好隔离 cookie 和数据目录。
emqx2 这种节点名要按 4372 查,不是 4371。
如果只是验证方案,别在 WSL + Docker bridge + 跨宿主机端口映射上搞了。换成每个节点独立 VM/IP,或者用 macvlan/overlay 网络让容器拿到可路由 IP,再测集群会省很多时间。