Ubuntu Docker镜像中Paho C++ MQTT客户端无法连接Mosquitto(Python正常)
Docker Ubuntu容器中C++ MQTT客户端连接失败问题
问题已持续数日,仅在Ubuntu Docker容器环境下复现,本地Linux机器无此问题。架构内所有组件均运行于Docker容器本地网络,使用官方Ubuntu镜像,已安装python3及C++工具。
Mosquitto Broker配置
当前运行Mosquitto 2.0.15,配置如下:
listener 1883 protocol mqtt allow_anonymous true log_dest file /home/user/mosquitto.log
无安全认证的MQTT broker运行在默认端口1883,已配置日志文件用于调试。
Python客户端情况
采用最简方式连接,代码片段如下:
... self.mqtt_client = mqtt.Client(client_id="Client Id") self.mqtt_client.connect("localhost", 1883, 6000) ... self.mqtt_client.loop_start() ...
该客户端可正常连接broker,订阅、发布功能均正常,且broker日志中能记录其连接尝试。
C++客户端问题
同样采用最简实现,代码片段如下:
... mqtt::async_client MQTTClient("tcp://localhost:1883", "Another Client Id"); MQTTClient.connect()->wait(); ...
每次尝试连接均失败,报错信息:
terminate called after throwing an instance of 'mqtt::exception' what(): MQTT error [-1]: TCP/TLS connect failure Aborted (core dumped)
尽管报错提示SSL/TLS错误,但实际是无法找到broker的通用错误(本地机器停止broker时也会出现相同错误)。开启verbose模式的broker日志中,未记录C++客户端的任何连接尝试。
已尝试的排查操作
- 更换连接broker的IP地址:localhost/127.0.0.1/0.0.0.0
- 修改监听端口
- 指定MQTT版本
- 使用
strace调试客户端 - 验证C++客户端版本与本地机器一致
以上操作均未解决问题,推测可能与Docker的TCP套接字处理机制有关,现寻求问题原因分析及调试建议。
内容的提问来源于stack exchange,提问作者asergio
相关产品推荐
相关产品推荐

