目录
在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,以此实现数据传输。