目录

怎么通过docker搭建一个mqtt服务器

怎么通过docker搭建一个mqtt服务器

由于debug需要排查mqtt的连接问题,为了方便,自己在云服务器上搭建一个mqtt服务器。

文中涉及的IP是虚构的IP,请替换成自己云服务器的IP,如有雷同,纯属巧合。

大致分为三部分:

一、安装docker

二、安装mqtt服务器

三、测试mqtt服务器

步骤 1:安装 Docker

确保你的系统上已经安装了 Docker 。如果还没有安装,可以参考以下命令来安装:

Ubuntu 上安装 Docker
sudo apt update
sudo apt install docker.io -y

#安装完成后,启动 Docker 并设置为开机启动:
sudo systemctl start docker
sudo systemctl enable docker

步骤 2:拉取 Mosquitto 镜像

在命令行中运行以下命令来拉取 Mosquitto 的 Docker 镜像:

docker pull eclipse-mosquitto

#启动 MQTT 服务器容器
使用以下命令启动 Mosquitto 容器:

docker run -d --name mosquitto -p 1883:1883 -p 9001:9001 eclipse-mosquitto

参数解释
-d:以后台模式运行容器。
--name mosquitto:设置容器的名称为 mosquitto。
-p 1883:1883:将主机的 1883 端口映射到容器的 1883 端口(用于 MQTT)。
-p 9001:9001:将主机的 9001 端口映射到容器的 9001 端口(用于 WebSocket)。
eclipse-mosquitto:使用的 Docker 镜像名称。

步骤 3:验证 MQTT 服务器

可以使用 MQTT 客户端 (如 Mosquitto clientsMQTT.fxMQTT Explorer )来验证 MQTT 服务器的运行是否正常。

这里使用 MQTTX 来验证

https://i-blog.csdnimg.cn/direct/2200cd2a0313405d936930fe6d42fb40.png

然后点击连接,当头一棒,提示连接被拒绝。

查问题,

1)检查服务器是否正常监听

https://i-blog.csdnimg.cn/direct/41565133e03d4229a9e895a1e6af11da.png

正常。

2)使用网络调试助手连接, https://i-blog.csdnimg.cn/direct/c347684cda384f719ee57c4245046dd9.png

3)打开云服务器的安全组配置、

增加两条规则

https://i-blog.csdnimg.cn/direct/b93a76f0569747d598f62f4c036dd67f.png

然而并不管用,依然连接不上。

于是只能去修改服务器 mqtt 规则,因为我们没有建任何用户,理论上服务器也不知道应该给谁放行。

修改问题:创建 Mosquitto 配置文件

在主机上创建一个新的 Mosquitto 配置文件。例如,创建一个目录 /mosquitto/config ,并在其中创建配置文件 mosquitto.conf

mkdir -p /mosquitto/config
nano /mosquitto/config/mosquitto.conf

在编辑器中添加或修改 mosquitto.conf,例如:

# 监听端口 1883

listener 1883
allow_anonymous true

# 监听 WebSocket 端口 9001

listener 9001
protocol websockets
allow_anonymous true

# 日志文件路径(可选)

log_dest file /mosquitto/log/mosquitto.log

步骤 2:停止并删除现有的 Mosquitto 容器并重启 mosquitto 容器

docker stop mosquitto
docker rm mosquitto

#重新启动新的 Mosquitto 容器:

docker run -d --name mosquitto \
 -p 1883:1883 -p 9001:9001 \
 -v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \
 -v /mosquitto/log:/mosquitto/log \
 eclipse-mosquitto

修改配置文件之前,需要停止当前运行的 Mosquitto Docker 容器

现在使用网络调试助手再次连接,可以顺利连接上。

使用 mqtt 中增加订阅,主题  test/topic,, 然后再 payload 中

  • MQTTX 的右侧面板,找到 “发布” (Publish)区域。
  • “Topic” (主题)栏中,输入发布消息的主题 test/topic,
  • “Payload” (有效负载)栏中,输入要发送的消息内容  { “message”: “Hello MQTT” }
  • 点击 “发布” 按钮,将消息发布到指定的主题。
  • 如果发布成功,在订阅窗口看到这条消息,表示服务器和客户端的连接正常

https://i-blog.csdnimg.cn/direct/fdf68c6065d24bed8b9f41c55fce2202.png