怎么通过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 clients 、 MQTT.fx 、 MQTT Explorer )来验证 MQTT 服务器的运行是否正常。
这里使用 MQTTX 来验证
然后点击连接,当头一棒,提示连接被拒绝。
查问题,
1)检查服务器是否正常监听
正常。
2)使用网络调试助手连接,
3)打开云服务器的安全组配置、
增加两条规则
然而并不管用,依然连接不上。
于是只能去修改服务器 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” }
- 点击 “发布” 按钮,将消息发布到指定的主题。
- 如果发布成功,在订阅窗口看到这条消息,表示服务器和客户端的连接正常