在docker中安装MQTT教程

网上的好多关于在docker中安装MQTT教程都是错误的不完整的。这篇博客是完整的,实践过的,踩过了很多的坑得来的,欢迎大家享用!

1、首先在docker中拉取镜像
bash 复制代码
docker pull eclipse-mosquitto
2、创建配置文件目录
bash 复制代码
mkdir -p /docker/mosquitto/config
mkdir -p /docker/mosquitto/data
mkdir -p /docker/mosquitto/log

注意:这个地方的目录是宿主机目录

3、在宿主机创建配置文件
bash 复制代码
#存放基本配置
touch /docker/mosquitto/config/mosquitto.conf

#存放用户密码配置文件
touch /docker/mosquitto/config/pwfile.conf

#日志目录
touch /docker/mosquitto/log/mosquitto.log
4、修改配置文件
bash 复制代码
vi /docker/mosquitto/config/mosquitto.conf

注意:这里的路径是宿主机路径

具体文件如下:
这里的所有路径,指向的都是 docker 的路径,不需要修改!!!

bash 复制代码
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log

listener 1883
#协议模式,可以不指定
#protocol websockets

# 关闭匿名模式
allow_anonymous false

#指定密码文件
password_file /mosquitto/config/pwfile.conf
5、修改文件权限
bash 复制代码
chmod -R 755 /docker/mosquitto
chmod -R 777 /docker/mosquitto/log #日志目录要最大权限

注意:这里的目录是宿主机目录

6、启动命令
bash 复制代码
docker run -it --name=mosquitto --privileged  -p 1883:1883 -p 9100:9001 -v /docker/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf  -v /docker/mosquitto/data:/mosquitto/data -v /docker/mosquitto/log:/mosquitto/log -v /docker/mosquitto/config/pwfile.conf:/mosquitto/config/pwfile.conf -d  eclipse-mosquitto 
bash 复制代码
命令详解:
1883是应用的端口,9001是管理程序的端口。要将宿主机和容器之间的文件关系进行映射,
冒号前面的是宿主机配置,冒号后面是容器配置
比如:-p 1883:1883  前面是宿主机端口 ,后面是容器端口,因此需要在宿主机的防火墙中放开1883这个端口。其他配置都是类似,需要了解。

好多网上的启动命令没有这一句话:-v /docker/mosquitto/config/pwfile.conf:/mosquitto/config/pwfile.conf
就会报找不到文件的错误:Error: Unable to open log file /mosquitto/log/mosquitto.log for writing.
一定记得把宿主机的文件目录和容器的目录映射起来,这样在启动的时候,就不会报错。

7、账号密码修改

进入mosquitto容器

bash 复制代码
docker exec -it mosquitto sh

mosquitto_passwd -b /mosquitto/config/pwfile.conf test test2023  #设置账号密码

exit退出容器

8、重启容器
bash 复制代码
docker restart mosquitto
9、客户端访问

下载MQTT.fx进行配置访问,如下图:

以上,就是本次的详细过程!

相关推荐
库库的里昂几秒前
Linux系统Docker部署开源在线协作笔记Trilium Notes与远程访问详细教程
linux·运维·docker·开源
在下不上天11 分钟前
flume-将日志采集到hdfs
大数据·linux·运维·hadoop·hdfs·flume
winfredzhang18 分钟前
解决 Docker Desktop 启动报错:Docker Desktop is unable to detect a Hypervisor
docker·desktop·报错解决
mit6.8241 小时前
[Redis#3] 通用命令 | 数据类型 | 内部编码 | 单线程 | 快的原因
linux·redis·分布式
^Lim1 小时前
esp32 JTAG 串口 bootload升级
java·linux·网络
小林熬夜学编程1 小时前
【Linux系统编程】第五十弹---构建高效单例模式线程池、详解线程安全与可重入性、解析死锁与避免策略,以及STL与智能指针的线程安全性探究
linux·运维·服务器·c语言·c++·安全·单例模式
玖玖玖 柒染1 小时前
windows下sqlplus连接到linux oracle不成功
linux·windows·oracle
LuckyTHP1 小时前
CentOS 9 无法启动急救方法
linux·运维·centos
Bonne journée1 小时前
centos和ubuntu有什么区别?
linux·ubuntu·centos
vvw&2 小时前
如何在 Ubuntu 22.04 上安装带有 Nginx 的 ELK Stack
linux·运维·nginx·ubuntu·elk·elasticsearch·开源项目