在Ubuntu22.04的Docker中部署MQTT服务器,在window上测试订阅和发布

在Ubuntu22.04中安装Docker

拉取Docker官方镜像库的mosquitto镜像

我是直接走代理节点连接Docker官方镜像库,这样拉取镜像比较简单,不用设置国内代理。

1.配置共享代理端口给Ubuntu

代理设置如下,系统代理打开,局域网连接打开,端口设置Http(s)端口为"7898"(自行设置,可以和我的不一样,但后面会用到设置的端口号)
在这里插入图片描述

在这里插入图片描述

2.在Ubuntu里配置Docker使用代理端口

在Ubuntu22.04的设置里面可以手动设置代理端口,但本人亲测要连接Docker官方镜像库,还要在Docker服务配置文件里也把这个代理地址加上。
在这里插入图片描述
首先找到这个目录,即Docker服务器的配置

/etc/systemd/system/docker.service.d

没有手动创建一个

sudo mkdir -p /etc/systemd/system/docker.service.d

然后创建一个*.conf文件,我这里叫http_proxy.conf,可以和我的名字不一样

sudo vim /etc/systemd/system/docker.service.d/http_proxy.conf

这个配置文件里这么写

[Service]
Environment="HTTP_PROXY=http://192.168.x.x:7898/"
Environment="HTTPS_PROXY=http://192.168.x.x:7898/"
Environment="NO_PROXY=localhost, 127.0.0.0/8, ::1"

上面的192.168.x.x就是代理所在设备局域网的地址,可以查到
在这里插入图片描述

改好后重启Docker服务

sudo systemctl daemon-reload		#重启daemon进程
sudo systemctl restart docker		#重启docker

验证一下是否修改成功

docker info

#正常会显示
*******
HTTP Proxy: 代理服务器ip:port
HTTPS Proxy: 代理服务器ip:port
*******

这里改成功里就可以直接从官方镜像库拉取镜像了。

3.拉取mosquitto镜像

docker pull eclipse-mosquitto

这将提取最新版本的 Eclipse Mosquitto MQTT 代理镜像。
拉取完成后通过docker images查看

REPOSITORY                                           TAG               IMAGE ID       CREATED         SIZE
eclipse-mosquitto                                    latest            fdc6f47a31a7   6 weeks ago     14.9MB

配置Docker上的mosquitto

1.创建一个Docker网络

如果您计划连接多个容器(例如,MQTT 代理和其他服务,如客户端或数据库),则最好创建一个 Docker 网络。

docker network create mqtt-network

2.运行Mosquitto broker

docker run -d \
  --name mosquitto \
  --network mqtt-network \
  -p 1883:1883 \
  eclipse-mosquitto

注意端口1883不要冲突,如果有冲突用sudo netstat -tuln | grep 1883查看是哪个程序占用了1883端口,然后关闭这个进程

sudo kill xxxx

3.查看Mosquitto broker是否正常运行

查看logs日志

docker logs mosquitto

出现这些表示正常运行

1732872628: mosquitto version 2.0.20 starting
1732872628: Config loaded from /mosquitto/config/mosquitto.conf.
1732872628: Starting in local only mode. Connections will only be possible from clients                                                                                                                                 running on this machine.
1732872628: Create a configuration file which defines a listener to allow remote access.
1732872628: For more details see https://mosquitto.org/documentation/authentication-meth                                                                                                                                ods/
1732872628: Opening ipv4 listen socket on port 1883.
1732872628: Opening ipv6 listen socket on port 1883.
1732872628: mosquitto version 2.0.20 running

用同一个局域网下的Windows电脑测试MQTT服务器是否运行正常

1.在Windows上安装MQTT客户端

我用的是Mosquitto client tools for Windows,也是一个Windows上的mosquitto命令行工具,安装好后在mosquitto目录下打开CMD,尝试发布和订阅,有可能会出现下面错误:

D:\Program Files\mosquitto>mosquitto_sub -h 192.168.3.79 -t "test/topic"
Error: 由于目标计算机积极拒绝,无法连接。

起初是以为没加端口,加上端口后依旧报错

D:\Program Files\mosquitto>mosquitto_sub -h 192.168.3.79 -p 1883 -t test/topic
Error: 由于目标计算机积极拒绝,无法连接。

后来发现是Docker上的MQTT Broker配置没有设置成全都可以访问

2.修改Docker中mosquitto配置

需要配置Mosquitto容器中的mosquitto.conf文件

docker exec -it mosquitto /bin/sh
vi /mosquitto/config/mosquitto.conf

#修改mosquitto.conf
listener 1883
allow_anonymous true

这个conf文件非常长啊,但主要找两块,一个是监听端口一个是安全性设置,慢慢找别心急
在这里插入图片描述在这里插入图片描述

3.重启Mosquitto容器

docker restart mosquitto

4.把防火墙的1883端口修改一下

sudo ufw allow 1883

Windows上远程订阅和发布测试

windows上开两个CMD一个用于订阅,一个用于发布

发布的CMD操作如下

在这里插入图片描述

订阅的CMD显示如下

在这里插入图片描述

下一篇会写在嵌入式Linux设备上用MQTT客户端发布topic,发布到Ubuntu22.04的Mosquitto Docker上,然后用Windows远程订阅这个topic,以此实现数据传输。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值