You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mqtt.js通过wss连接eclipse-mosquitto容器失败求助

解决mqtt.js连接Mosquitto wss端口失败(错误码1006)的问题

针对你遇到的mqtt.js无法连接wss端口,但ws正常、MQTT Explorer能通过TLS连接的情况,按以下方向排查:

1. 检查Mosquitto的wss监听配置是否正确

确保mosquitto.conf里的8084端口配置明确指定了websocket协议,完整配置示例:

listener 8084
protocol websockets
cafile /mosquitto/certs/ca.crt
certfile /mosquitto/certs/server.crt
keyfile /mosquitto/certs/server.key

如果缺少protocol websockets,8084实际是mqtts端口而非wss端口,这会导致mqtt.js用wss协议连接失败,而MQTT Explorer用mqtts协议连接成功,刚好匹配你的现象。

2. 确认证书路径与权限

  • 检查配置中的证书路径是否是容器内部的路径(比如你挂载了本地./certs到容器/mosquitto/certs,配置里就必须写/mosquitto/certs/xxx,不能写本地路径)。
  • 进入容器执行ls -l /mosquitto/certs,确保证书文件权限为可读(比如chmod 644),Mosquitto进程无法读取证书会导致wss监听静默失效,且可能不记录日志。

3. 验证证书的IP/域名匹配性

mqtt.js在TLS握手时会严格校验证书的Subject Alternative Name(SAN)或CN是否匹配你连接的IP(37.97.203.138):

  • 如果证书是基于域名签发的,用IP连接会触发校验失败,导致WebSocket异常关闭(错误码1006)。
  • 检查MQTT Explorer是否关闭了证书校验(比如勾选了"忽略证书错误"),如果是,说明证书本身存在匹配问题。

4. 确认容器端口与监听状态

  • 检查docker-compose的端口映射是否为8084:8084,避免端口映射错误。
  • 进入容器执行netstat -tulpn | grep mosquitto,确认8084端口处于LISTEN状态,如果没监听,说明配置有误导致wss端口未启动。

5. 调整mqtt.js的连接配置

如果使用自签证书,需要在mqtt.js选项中添加证书校验相关配置(仅测试环境使用,生产环境请使用合法证书):

const mqtt = require('mqtt');
const client = mqtt.connect('wss://37.97.203.138:8084', {
  clientId: 'mqttjs-client',
  rejectUnauthorized: false, // 跳过证书校验,仅测试用
  // 若使用合法证书,可添加ca选项指定CA证书
  // ca: fs.readFileSync('./certs/ca.crt')
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:18