千家信息网

如何使用Docker搭建MQTT服务器

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍如何使用Docker搭建MQTT服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 拉取镜像docker pull registry.cn-hangzho
千家信息网最后更新 2026年10月31日如何使用Docker搭建MQTT服务器

这篇文章主要介绍如何使用Docker搭建MQTT服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. 拉取镜像

docker pull registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

2. 运行镜像

  • -name 名字

  • -p 18083 服务器启动端口

  • -p 1882 TCP端口

  • -p 8083 WS端口

  • -p 8084 WSS端口

  • -p 8883 SSL端口

  • -d 指定容器

docker run --name emq -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 -d registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

3. 进入emq服务页面

  在浏览器输入机器IP:18083就可以进入emqtt页面

  初始的账户 admin, 密码 public

4. 配置emq(对于V3.1.0)

  为emq的用户配置权限 , emq还支持多种数据库验证, 包括 mongo, redis, pgsql 等等, 有兴趣可以自行研究

# 进入容器, 不能用 /bin/bash 进入docker exec -it emq /bin/sh

1.首先先关闭匿名认证(默认是开启的谁都能够登录)

# 编辑配置文件vi /opt/emqttd/etc/emq.conf# 更改允许匿名 True -> falseallow_anonymous = false

2.建立用户和权限的 mysql 表, 可以拉一个 mysql 容器, 也可以直接在你的 ubuntu 里的 mysql 中创建

CREATE DATABASE emq charset utf8;use eqm;CREATE TABLE mqtt_user ( id int(11) unsigned NOT NULL AUTO_INCREMENT, username varchar(100) DEFAULT NULL, password varchar(100) DEFAULT NULL, salt varchar(20) DEFAULT NULL, is_superuser tinyint(1) DEFAULT 0, created datetime DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY mqtt_username (username) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE mqtt_acl ( id int(11) unsigned NOT NULL AUTO_INCREMENT, allow int(1) DEFAULT NULL COMMENT '0: deny, 1: allow', ipaddr varchar(60) DEFAULT NULL COMMENT 'IpAddress', username varchar(100) DEFAULT NULL COMMENT 'Username', clientid varchar(100) DEFAULT NULL COMMENT 'ClientId', access int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub', topic varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.插入ACL规则 -ACL规则

   tips: !!! 不要直接按照下面的例子设置, 先查看ACL规则了解之后在根据自己情况进行配置

INSERT INTO `mqtt_acl` (`id`, `allow`, `ipaddr`, `username`, `clientid`, `access`, `topic`) VALUES (1,1,NULL,'$all',NULL,2,'#'),(2,0,NULL,'$all',NULL,1,'$SYS/#'),(3,0,NULL,'$all',NULL,1,'eq #'),(5,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),(6,1,'127.0.0.1',NULL,NULL,2,'#'),(7,1,NULL,'dashboard',NULL,1,'$SYS/#');

4.插入用户, 由此开始订阅与发布的 Client 都必须通过用户验证(sha256值请自行转换)

# 可以配置超级管理员(超级管理员会无视ACL规则对所有的topic都有订阅和推送的权限)insert into mqtt_user (`username`, `password`) values ('admin', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4');update mqtt_user set is_superuser=1 where id= 超级管理员ID ;ps:注意 auth.mysql.password_hash(默认为sha256) 为sha256的话,新增用户时需要手动传递加密后的值,plain的话则无需加密,明码存放

5.修改emq的mysql配置文件

vi /opt/emqttd/etc/plugins/emq_auth_mysql.confauth.mysql.server = 你的mysql-IP:3306 auth.mysql.username = root auth.mysql.password = xxxxxxxx auth.mysql.database = emq

6.重启emq

/opt/emqttd/bin/ emqx stop/opt/emqttd/bin/ emqx start/opt/emqttd/bin/emqttd_ctl plugins load emq_auth_mysql   #开启mysql认证插件
  • ACL规则

  规则表字段说明:

  • allow:禁止(0),允许(1)

  • ipaddr:设置 IP 地址

  • username:连接客户端的用户名,此处的值如果设置为 $all 表示该规则适用于所有的用户

  • clientid:连接客户端的 Client ID

  • access:允许的操作:订阅(1),发布(2),订阅发布都可以(3)

  • topic:控制的主题,可以使用通配符,并且可以在主题中加入占位符来匹配客户端信息,例如 t/%c则在匹配时主题将会替换为当前客户端的 Client ID

%u:用户名

%c:Client ID

  示例

-- 所有用户不可以订阅系统主题INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, '$all', NULL, 1, '$SYS/#');-- 允许 10.59.1.100 上的客户端订阅系统主题INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, '10.59.1.100', NULL, NULL, 1, '$SYS/#');-- 禁止客户端订阅 /smarthome/+/temperature 主题INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, NULL, NULL, 1, '/smarthome/+/temperature');-- 允许客户端订阅包含自身 Client ID 的 /smarthome/${clientid}/temperature 主题INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, NULL, NULL, NULL, 1, '/smarthome/%c/temperature');

以上是"如何使用Docker搭建MQTT服务器"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

用户 订阅 主题 客户 规则 配置 端口 服务 客户端 服务器 容器 权限 端的 管理员 管理 兴趣 内容 文件 用户名 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 博彦科技互联网金融 哈尔滨大商圈互联网科技有限公司 蓝思科技飞鸽互联网 江苏根荣互联网科技 云信互联网科技有限公司 科技赋能下的互联网金融 互联网科技未来 华脉科技工业互联网产品 央行互联网金融科技公司 以后互联网后是啥科技 昭通云南众福互联网科技有限公司 互联网时代科技改变生活 深圳艾果互联网通讯科技 互联网科技创新的路径 高科技互联网套路 南通创西澳互联网科技有限公司 普陀区互联网教育科技管理办法 恒生科技指数 中概互联网 杭州科技互联网公司有哪些 科技发展第三阶段互联网时代 互联网的科技 嘟嘟瓜互联网科技 国外互联网科技网站 上海电发互联网科技有限公司 中国科技互联网公司收入 创业天下互联网科技有限公司 团飞科技与伯堂互联网服务平台 语蝶互联网科技有限公司 徐州市互联网科技有限公司 中国互联网公司的科技投入
0