5分钟跑通MQTT:EMQX Docker部署+MQTTX联调(2026最新版,含踩坑)

5分钟跑通MQTT:EMQX Docker部署+MQTTX联调(2026最新版,含踩坑)

一、为什么第一步是"本地跑一个 Broker"

上一篇讲了 MQTT 是什么,这一篇直接上手。但在动手前,先建立正确预期:

MQTT 是"Broker 中心化"的协议 ------消息永远要经过中间那个 Broker。所以想跑通 MQTT,你需要的不是"写代码",而是先把一个 Broker 起起来 ,再用一个客户端工具连上去收发消息。这两件事今天 5 分钟就能搞定。

我选 EMQX(开源版)而不是 Mosquitto,原因很实际:

  • 自带一个 Web Dashboard,能看到连接数、消息吞吐、订阅关系------对新手极其友好;
  • 原生支持 MQTT 3.1.1 / 5.0 / WebSocket,后续篇章(共享订阅、消息流转、压测)都能在它上面跑;
  • 它在国内生产环境占有率很高,你现在练手的东西,以后真上生产还用得上。

二、先选对版本(2026 年现状,很多人在这里踩坑)

截至本文写作,EMQX 的版本线是这样的:

版本线 定位 Docker 镜像 说明
EMQX 5.8.x(开源版) 社区/生产都在用 emqx/emqx:5.8 本教程使用,最新 5.8.9,文档最全
EMQX 6.x(Enterprise) 企业版,已到 6.3 LTS emqx/emqx-enterprise 功能更强,但默认安全策略有调整,新手不必追新

⚠️ 坑点提醒 :网上很多"EMQX 安装教程"还在写 emqx/emqx:4.x,4.x 早已停止维护,命令和 Dashboard 差异很大。认准 5.x 的 emqx/emqx 镜像。Enterprise 6.x 对新手来说多了一层"安全加固配置"的干扰,本文不展开,等你把 5.x 玩熟再升级无痛。

客户端工具 MQTTX 当前最新是 v1.13.0(官网 https://mqttx.app 下载,支持 macOS/Windows/Linux,也有 Web 版和 CLI 版)。

三、端口规划:先认识这几个端口(可截图保存)

EMQX 默认监听下面这些端口,记不住没关系,先收藏这张表:

端口 协议 用途
1883 MQTT over TCP 设备/客户端标准接入(本文联调用它)
8083 MQTT over WebSocket 浏览器/前端接入
8084 MQTT over WebSocket + TLS 浏览器加密接入
8883 MQTT over TLS 设备加密接入(生产必用)
18083 HTTP Dashboard 管理后台(浏览器访问它)

坑点预告 :新手最常见的报错就是"连不上",原因十有八九是端口没映射对 或用错端口(比如拿 WebSocket 的 8083 去当 TCP 的 1883 连)。下一节我会给排查表。

四、Docker 一键部署 EMQX

前置条件:本机已装好 Docker(docker -v 能输出版本号即可)。

bash 复制代码
# 1. 拉取并启动 EMQX(开源版 5.8)
docker run -d \
  --name emqx \
  -p 1883:1883 \
  -p 8083:8083 \
  -p 8084:8084 \
  -p 8883:8883 \
  -p 18083:18083 \
  emqx/emqx:5.8

# 2. 看启动日志,确认没有报错(首次启动约需 10~20 秒)
docker logs -f emqx

命令逐行解释(这些以后生产部署也这么写):

  • -d:后台运行;
  • --name emqx:给容器起名,方便后面 docker logs emqx / docker stop emqx;
  • -p 宿主机端口:容器端口:把容器内的 5 个端口映射到本机,冒号两边端口号别写错;
  • emqx/emqx:5.8:开源版镜像 + 指定 5.8 版本(不写 tag 默认 latest,但生产里永远显式指定版本,避免半夜自动升级出幺蛾子)。

看到日志里出现 EMQX ... is running now 之类的字样,说明启动成功。

五、登录 Dashboard

浏览器打开:http://localhost:18083

  • 默认账号:admin
  • 默认密码:public

登录后你会看到「总览 / 连接 / 主题 / 订阅 / 规则 / 监控」等菜单。这里先做一件事:改默认密码 (系统设置 → 用户 里操作)。admin/public 是全世界都知道的默认值,公网环境不改等于裸奔------这是我在生产巡检里反复强调的一条。

六、MQTTX 联调:一次真实的收发

  1. 下载安装 MQTTX :去 https://mqttx.app 下对应系统的版本(macOS 也可以 brew install --cask mqttx)。

  2. 新建连接,填这几个字段:

    字段 填写值 说明
    Name 随意,如 local-test 连接配置的名字
    Host mqtt://localhost 协议 + 主机
    Port 1883 对应 TCP 端口
    Client ID 留空(自动生成) 客户端唯一标识,第 5 篇讲它为什么重要
    Username / Password 留空 EMQX 默认允许匿名接入

    点击右上角「连接」,看到状态变绿、能收到 Broker 回包,说明连接成功。

  3. 订阅一个主题 :点「+ 新建订阅」,Topic 填 test/temp,QoS 选 1。

  4. 发布一条消息 :在下方发布区,Topic 填 test/temp,Payload 填:

    json 复制代码
    {"device":"sensor-01","temp":26.5,"ts":1750000000}

    点发送,你会立刻在上面订阅区收到这条消息------这就是 MQTT 最基本的"发布 → Broker → 订阅"闭环,跑通了。

想验证"一对多":再开一个 MQTTX 连接(或复用同一个,再订阅一次 test/#),往 test/temp 发消息,两个订阅都会收到。这就是上一篇讲的发布订阅。

七、📌 可拿走资产:常见"连接被拒绝"排查表

第一次连不上太正常了。按这张表从上到下查,90% 的问题能在 2 分钟内定位:

现象 / 报错 最常见原因 怎么解决
Connection refused 端口没映射 / 没启动 docker ps 看容器是否 running;docker logs emqx 看是否启动完成
连的是 8083 却报拒 WebSocket 端口 ≠ TCP 端口 TCP 客户端用 1883,浏览器/WebSocket 才用 8083
Connection refused (8883) 用了 TLS 端口但没配证书 先别连 8883,用明文 1883 跑通再上 TLS
Not authorized(拒绝授权) Dashboard 改了认证但客户端没带账号 给连接填对 Username/Password,或回 Dashboard 检查认证设置
Bad username or password 账号密码错 确认是 EMQX 里创建的用户,不是 Dashboard 的 admin
Identifier rejected(标识被拒) Client ID 重复且开了"踢旧连接"之外的策略 换一个唯一的 Client ID(生产里 Client ID 冲突有专门一篇讲)
Unacceptable protocol version 客户端和 Broker 的 MQTT 版本不匹配 统一用 MQTT 3.1.1 或 5.0(EMQX 默认两者都支持)
本机连得上、别的机器连不上 防火墙 / 安全组 放通 1883(及 18083);云服务器要在安全组里加规则
Docker 端口映射了但宿主机不通 监听地址绑定 127.0.0.1 或端口被占用 docker port emqx 看映射;`netstat -tlnp

八、📌 可拿走资产:部署命令速查

bash 复制代码
# 启动(显式指定版本)
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.8

# 查看日志
docker logs -f emqx

# 停止 / 启动 / 删除(删除会丢数据,慎用)
docker stop emqx && docker start emqx
docker rm -f emqx   # 彻底删除容器

# 看端口映射是否正确
docker port emqx

九、写在最后

到这一步,你已经有了一个能跑通收发的本地 MQTT 环境,后面每一篇的实验都能在这个环境上复现。但"跑通"只是开始------MQTT 里最容易用错、也最影响生产的,是 QoS。很多人的理解是"QoS2 最可靠,那就都用 QoS2",这恰恰是生产事故的起点。

下一篇 第 3 篇:QoS 0/1/2 怎么选?90% 的人用错------QoS2 不是越高越好,我会把三个等级的一次握手流程画给你看,讲清楚"为什么 QoS2 会把你推向凌晨三点的积压事故"。


🔔 评论区提问: 你第一次连 EMQX 是卡在哪个报错上?或者你有没有遇到过"本机通、远程不通"的诡异情况?留言说说,我在故障复盘篇会专门讲网络层那些坑。

相关推荐
java_logo14 小时前
Docker 部署 Dify:轻松搭建 LLM 应用开发平台
运维·docker·容器
方便面不加香菜15 小时前
Docker Container -- 综合实战案例详解
运维·docker·容器
河北乐讯通物联网服务商17 小时前
航油管理终端:机场里每架飞机加了什么油、加了多少,是怎么实时算清楚的?
物联网·物联网卡·航油管理终端
数字新视界19 小时前
信创机房动环监控技术在提升数据中心管理效率中的应用与前景分析
物联网·数据中心·数据中心基础设施管理·dcim管理系统·数据中心dcim
修己xj20 小时前
在 AMD 机器上拉取 ARM 架构 Docker 镜像
docker
瑞克-桑切斯1 天前
docker Harbor 单机部署手册
大数据·运维·elasticsearch·docker·容器
wuyk5552 天前
Keil工具链-第05讲-启动文件与__main到底做了什么
c语言·stm32·单片机·嵌入式硬件·物联网
Eyfcom2 天前
〖物联网终端实战 02〗RFID 批量群读防碰撞算法:整托盘入库如何做到“秒级”识别
物联网·物流系统·快递系统·跨境物流快递系统·物联网终端实战
孙克旭_2 天前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
java_logo3 天前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机