You need to enable JavaScript to run this app. Ubuntu Docker部署ThingsBoard发MQTT数据连接被拒排查
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Docker部署ThingsBoard发MQTT数据连接被拒排查

ThingsBoard Docker环境MQTT发布报错定位

核心错误根因

从堆栈报错io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record可直接确定问题本质:

  • 你访问的1883端口上,ThingsBoard的MQTT服务端开启了SSL/TLS加密校验逻辑
  • 你通过mosquitto_pub发送的是无加密的明文MQTT报文,协议层不匹配,服务端会在TCP握手完成后直接丢弃报文,不会进入后续的设备认证、数据处理环节

已发现的操作误区

  • 执行lsof -i :1883查询不到端口监听结果,是因为未加sudo权限:Docker的端口代理进程归属root用户,普通权限的lsof无法读取其他用户的端口占用信息,正确查询命令为sudo lsof -i :1883
  • 检索日志的路径存在错误:启动容器时已经将容器内的/var/log/thingsboard目录映射到宿主机的~/.mytb-logs,宿主机本地的/var/log/thingsboard路径和当前Docker容器无关联,正确的日志查询命令为cat ~/.mytb-logs/thingsboard.log | grep ERROR
  • 原有mosquitto_pub命令存在两处格式问题:
  • 消息载荷{"temperature":28}未加单引号包裹,会被shell语法解析错误
  • -u参数后填写的占位符token没有替换为ThingsBoard平台对应设备生成的真实访问凭证

修复操作步骤

  1. 进入容器确认实际端口监听规则,执行命令:
    sudo docker exec -it mytb netstat -tulpn | grep -E '1883|8883'
    官方tb-postgres镜像的默认端口规则为:1883提供无加密的明文MQTT服务,8883提供强制SSL加密的MQTTS服务
  2. 若查询发现1883端口的监听逻辑被修改为强制SSL,可备份数据卷后删除旧容器,按默认配置重新启动:
    docker run -it -p 9090:9090 -p 1883:1883 -p 8883:8883 -p 5683:5683/udp -v ~/.mytb-data:/data -v ~/.mytb-logs:/var/log/thingsboard --name mytb --restart always thingsboard/tb-postgres
  3. 待容器启动完成后,使用修正后的命令发布测试数据:
    mosquitto_pub -h "localhost" -p "1883" -t "v1/devices/me/telemetry" -u "替换为设备真实访问token" -m '{"temperature":28}'

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 05:24:11