千家信息网

如何在Docker中安装MQTT

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章将为大家详细讲解有关如何在Docker中安装MQTT,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。MQTT简介MQTT(Message Que
千家信息网最后更新 2026年11月03日如何在Docker中安装MQTT

这篇文章将为大家详细讲解有关如何在Docker中安装MQTT,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

Docker安装RabbitMQ配置MQTT

使用RabbitMQ作为MQTT服务端,Eclipse Paho作为客户端。宿主机系统为ubuntu16.04

Docker下载镜像

docker pull daocloud.io/library/rabbitmq:3.7.4

启动RabbitMQ

docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 daocloud.io/library/rabbitmq:3.7.4

注意映射容器端口

  • 15672 是rabbitmq management管理界面默认访问端口

  • 5672 是amqp默认端口

  • 1883 是mqtt tcp协议默认端口

  • 15675 是web_mqtt websocket协议默认端口

启用插件

默认安装后我们需要手动开启rabbitmq_management插件,rabbitmq_mqtt插件和rabbitmq_web_mqtt插件。

执行如下三条命令

docker exec <容器ID> rabbitmq-plugins enable rabbitmq_managementdocker exec <容器ID> rabbitmq-plugins enable rabbitmq_mqttdocker exec <容器ID> rabbitmq-plugins enable rabbitmq_web_mqtt

当然你也可以写个脚本start.sh,复制到容器中

/usr/sbin/rabbitmq-plugins enable rabbitmq_management/usr/sbin/rabbitmq-plugins enable rabbitmq_mqtt/usr/sbin/rabbitmq-plugins enable rabbitmq_web_mqtt

进入容器执行这个脚本。

sh start.sh

开放宿主机端口

firewall-cmd --zone=public --add-port=15672/tcp --permanentfirewall-cmd --zone=public --add-port=5672/tcp --permanentfirewall-cmd --zone=public --add-port=1883/tcp --permanentfirewall-cmd --zone=public --add-port=15675/tcp --permanentfirewall-cmd --reload

Python MQTT客户端实现

安装python包

pip install paho-mqtt

发送数据demo(消费者)

# 使用前需要启动hbase和thrift服务器# 启动hbase在cd /usr/local/hbase下bin/start-hbase.sh  默认端口为 60000# 启动thrift服务器cd /usr/local/hbase/bin执行./hbase-daemon.sh start thrift  默认端口为9090import sysimport osdir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹import argparse  #import loggingimport time,datetimefrom common.py_log import init_logger,init_console_loggerfrom common.config import *from common.py_hbase import PyHbaseimport time,jsonfrom common.py_rabbit import Rabbit_Consumerimport paho.mqtt.client as mqttimport timeHOST = "192.168.2.46"PORT = 1883def client_loop():  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  client.on_connect = on_connect  client.on_message = on_message  client.connect(HOST, PORT, 60)  client.loop_forever()def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_loop()

接收数据demo(生产者)

import sysimport osdir_common = os.path.split(os.path.realpath(__file__))[0] + '/../'sys.path.append(dir_common)  # 将根目录添加到系统目录,才能正常引用common文件夹import paho.mqtt.client as mqttimport timeHOST = "192.168.2.46"PORT = 1883def client_loop():  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  client.on_connect = on_connect  client.on_message = on_message  client.connect(HOST, PORT, 60)  client.loop_forever()def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_loop()

生产者demo

# import paho.mqtt.client as mqttimport paho.mqtt.publish as publishimport timeHOST = "192.168.2.46"PORT = 1883def on_connect(client, userdata, flags, rc):  print("Connected with result code "+str(rc))  client.subscribe("test")def on_message(client, userdata, msg):  print(msg.topic+" "+msg.payload.decode("utf-8"))if __name__ == '__main__':  client_id = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))  # client = mqtt.Client(client_id)  # ClientId不能重复,所以使用当前时间  # client.username_pw_set("guest", "guest") # 必须设置,否则会返回「Connected with result code 4」  # client.on_connect = on_connect  # client.on_message = on_message  # client.connect(HOST, PORT, 60)  # client.publish("test", "你好 MQTT", qos=0, retain=False) # 发布消息  publish.single("test", "你好 MQTT", qos = 1,hostname=HOST,port=PORT, client_id=client

关于如何在Docker中安装MQTT就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

端口 插件 容器 时间 系统 utf-8 服务 中安 你好 内容 客户 客户端 宿主 宿主机 数据 文件 文件夹 文章 更多 服务器 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 互联网 科技创新 苏州大垚互联网科技 多迪互联网科技有限公司 银川新华互联网科技学校地址 成都玖崟互联网科技有限公司乐商圈怎么样 科技与互联网的利与弊 互联网教育科技公司vipkid 互联网时代科技改变生活 语蝶互联网科技有限公司 广州千川互联网科技有限公司 互联网风格科技公司名称 互联网科技包装股 宁波跨境商互联网科技有限公司 万物互联网智能科技 悟空问答互联网科技 唐山双旺合互联网科技产业园 科技互联网公司两年变化 互联网金融金融科技 伍佰万互联网科技是干嘛的 什么是科技互联网 湖南永感互联网科技有限公司 互联网的科技 科技互联网大厂 国大互联网教育科技有限公司工作 河南住房之家互联网科技 徐州市互联网科技有限公司 美国互联网科技实力 扫呗互联网科技有限公司 宁波跨境商互联网科技有限公司
0