如何解决MQTT Broker连接被拒:协议版本不可接受的问题?
解决MQTTX CLI连接Docker中MQTT Broker提示“MQTT协议版本不可接受”问题
核心问题分析
你添加的bridge_protocol_version mqttv311是用于MQTT桥接(Broker之间互联)的配置,对客户端连接无效。终端连接失败的本质是Broker的协议版本配置不兼容MQTTX CLI的默认版本,或者Broker未正确监听外部连接端口。
具体解决步骤
1. 修正Mosquitto Broker的协议版本配置
编辑你的Mosquitto配置文件(如果是挂载宿主机文件,直接修改宿主机对应文件;否则进入容器修改/mosquitto/config/mosquitto.conf),添加以下配置:
# 指定Broker支持的MQTT协议版本(根据你的Broker版本选择,比如v3.1.1) protocol_version mqttv311 # 允许外部客户端连接(监听所有网络接口) listener 1883 0.0.0.0 # 如果未配置认证,临时开启匿名访问测试(测试后建议关闭) allow_anonymous true
修改后重启MQTT Broker容器:
docker-compose restart mqtt-broker
2. 用MQTTX CLI指定协议版本连接
在Ubuntu终端执行订阅/发布命令时,显式指定协议版本(和Broker配置一致):
- 订阅示例:
mqttx sub -t "your/topic" -h localhost -p 1883 -V 3.1.1
- 发布示例:
mqttx pub -t "your/topic" -h localhost -p 1883 -V 3.1.1 -m "test message"
注意:如果Broker容器映射的不是宿主机1883端口,替换成实际映射的端口;如果Broker不在本地,替换
localhost为容器所在服务器的IP。
3. 验证Docker端口映射配置
检查docker-compose.yml中MQTT Broker的端口映射是否正确,确保宿主机端口和容器内部端口对应:
services: mqtt-broker: image: eclipse-mosquitto:xxx # 你的Broker镜像版本 ports: - "1883:1883" # 宿主机端口:容器内部端口 volumes: - ./mosquitto/config:/mosquitto/config - ./mosquitto/data:/mosquitto/data - ./mosquitto/log:/mosquitto/log
内容的提问来源于stack exchange,提问作者Angel Hadzhiev
相关产品推荐
相关产品推荐

