You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用dash_mqtt通过WebSocket连接Docker部署的Eclipse MQTT Broker失败的配置调整咨询

解决Dash MQTT WebSocket连接失败的问题

你遇到的核心问题是:dash_mqtt 使用WebSocket协议连接MQTT Broker,但你的Eclipse Mosquitto默认只开启了原生MQTT的TCP端口(1883),并没有配置WebSocket监听端口,所以浏览器尝试连接ws://172.17.0.2:1883/mqtt时会失败。

下面是具体的修复步骤:


1. 修改Mosquitto配置,开启WebSocket监听

编辑你的mosquitto.conf文件,添加专门的WebSocket监听端口(行业常用端口是8083,你也可以自定义其他未占用端口):

# 保留原有的TCP监听(用于原生MQTT客户端)
listener 1883

# 添加WebSocket监听端口及协议配置
listener 8083
protocol websockets

这个配置让Mosquitto同时支持两种连接方式:

  • 1883端口:原生MQTT TCP协议(适配传统MQTT客户端)
  • 8083端口:MQTT over WebSocket协议(适配Dash这类浏览器端应用)

2. 更新Dash应用的连接参数

修改你的app.py中的端口配置,将WebSocket连接端口改为刚才配置的8083:

TEST_SERVER = '172.17.0.2'
TEST_SERVER_PORT = 8083  # 替换为WebSocket监听端口
TEST_SERVER_PATH = 'mqtt'  # Mosquitto默认的WebSocket路径,无需修改

3. 确保Docker容器映射了WebSocket端口

重启你的Mosquitto容器时,需要把8083端口也映射到宿主机(如果Dash和Mosquitto在同一个自定义Docker网络中,端口映射到宿主机不是必须的,但要确保两个容器在同一网络内),示例启动命令:

docker run -d -p 1883:1883 -p 8083:8083 -v /path/to/your/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto

4. 重启服务并验证

  • 重启Mosquitto容器,让新配置生效
  • 重启Dash应用
  • 可以先用MQTT工具(比如MQTTX)测试WebSocket连接:ws://172.17.0.2:8083/mqtt,确认Broker能正常响应后,再测试Dash应用的发送/接收功能

这样修改后,dash_mqtt就能通过WebSocket正常连接到Mosquitto Broker,实现消息的发送和接收了。

内容的提问来源于stack exchange,提问作者Anup

火山引擎 最新活动