使用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




