使用openwrt的docker容器来运行mqtt服务

putty登录主机
拉取镜像

1
docker pull eclipse-mosquitto

新建配置文件夹
下面的文件夹路径根据你自己设备的实际情况做相应的更改

1
2
3
mkdir -p /mnt/mmcblk2p4/docker/mqtt/config
mkdir -p /mnt/mmcblk2p4/docker/mqtt/data
mkdir -p /mnt/mmcblk2p4/docker/mqtt/log

新建配置文件

1
nano /mnt/mmcblk2p4/docker/mqtt/config/mosquitto.conf

复制下面的内容,然后保存。

1
2
3
4
5
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous true

文件夹赋予权限

1
2
chmod -R 755 /mnt/mmcblk2p4/docker/mqtt
chmod -R 777 /mnt/mmcblk2p4/docker/mqtt/log

运行容器

1
docker run -it --name=mosquitto --privileged  -p 1883:1883 -p 9001:9001 -v /mnt/mmcblk2p4/docker/mqtt/config/mosquitto.conf:/mosquitto/config/mosquitto.conf  -v /mnt/mmcblk2p4/docker/mqtt/data:/mosquitto/data -v /mnt/mmcblk2p4/docker/mqtt/log:/mosquitto/log -d  eclipse-mosquitto 

目前可以使用IP加1883端口直接连接mqtt服务器,无需使用用户名密码登录。
如果需要设置用户名密码,则需要在mosquitto.conf文件中将allow_anonymous true字段改成fasle,然后声明密码文件保存路径。详细配置参考下面:

1
2
3
4
5
6
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
listener 1883
allow_anonymous false
password_file /mosquitto/config/pwfile.conf

找到容器的id并将下面命令行中的id字段进行替换

1
docker ps 

进入到容器中

1
docker exec -it id sh 

运行下面的命令创建用户和密码。

1
mosquitto_passwd /mosquitto/config/pwfile.conf mqtt

完成之后ctrl+p ctrl+q保存退出。
重启docker容器

1
docker restart id

之后就可以使用设置的用户名和密码连接mqtt服务器了。