首页 > 其他分享 >3. 使用Docker部署MQTT平台mosquitto到云服务器

3. 使用Docker部署MQTT平台mosquitto到云服务器

时间:2024-10-31 18:17:28浏览次数:14  
标签:容器 log data MQTT mosquitto docker config Docker

3. 使用Docker部署MQTT平台mosquitto到云服务器

1. 拉取Mosquitto Docker镜像(这里选择拉取1.6.14版本,因为最新版本报错Address not available)
docker pull eclipse-mosquitto
 
# 或者拉取1.6.14版本
docker pull eclipse-mosquitto:1.6.14

2. 创建mosquitto配置文件

在运行容器之前我们需要先创建一个配置文件,定义mosquitto的日志、配置等文件的存储路径,我们在服务器的根目录下创建一个文件夹。

cd /
# 创建文件夹
mkdir mosquitto
 
# 创建配置文件夹、日志文件夹
mkdir -p /mosquitto/config
mkdir -p /mosquitto/data
mkdir -p /mosquitto/log

在config文件夹下编辑配置文件mosquitto.conf,并添加下列配置内容;

# 开启持久化
persistence true
# 指定持久化存储的路径
persistence_location /mosquitto/data
# 指定日志文件的存储路径
log_dest file /mosquitto/log/mosquitto.log
# 定义mosquitto监听的tcp端口
listener 1883

注意:listener的端口也可改成其他的(如果后面报错“Address in use”,同时端口又没有被占用的话可以试一下)

这个示例配置指定了MQTT代理监听的端口、持久化数据存储的位置以及日志文件的位置。存储地址可以根据自己的需求进行修改和调整。

为目录授予权限

chmod -R 755 /mosquitto
chmod -R 777 /mosquitto/log

3. 创建mosquitto容器运行

在终端或命令行界面中运行以下命令来运行Mosquitto容器:

docker run -it --name=mosquitto --privileged -p 1883:1883 -p 9001:9001 -v /mosquitto/config:/mosquitto/config -v /mosquitto/data:/mosquitto/data -v /mosquitto/log:/mosquitto/log -d eclipse-mosquitto

image-20240330160134416

注意: 一定要看清楚本地文件路径

-itd:以交互模式运行容器,启动之后在后台运行,方便查看输出日志和控制台信息。

–privileged=true: 给予容器赋予root级别权限

-p 1883:1883:将宿主机的1883端口映射到容器内的1883端口,以便可以通过该端口与MQTT代理进行通信。
–name 容器名称
-v /mosquitto/config:/mosquitto/config:将本地的mosquitto-config文件夹挂载到容器内的/mosquitto/config路径,用于配置文件的持久化存储。
-v /mosquitto/data:/mosquitto/data:将本地的mosquitto-data文件夹挂载到容器内的/mosquitto/data路径,用于数据的持久化存储。
-v /mosquitto/log:/mosquitto/log:将本地的mosquitto-log文件夹挂载到容器内的/mosquitto/log路径,用于日志的持久化存储。
-d eclipse-mosquitto:指定要运行的Mosquitto镜像。

根据实际情况,将/mosquitto/config、/mosquitto/data和/mosquitto/log替换为你本地系统上的相应路径。

运行该命令后,Docker将会创建并运行Mosquitto容器,配置文件和数据将被挂载到容器中,使得配置的持久化和数据的保存得以实现。

看到mosquitto的容器名称证明启动成功。

docker ps
或者
docker ps -a

配置权限
在/mosquitto/config/mosquitto.conf文件下添加:

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf

进入容器

docker exec -it [容器名 或 容器ID] sh

生成密码

touch /mosquitto/config/pwfile.conf
chmod -R 755 /mosquitto/config/pwfile.conf

使用mosquitto_passwd命令创建用户,第一个hgh是用户名,第二个123456是密码。

mosquitto_passwd -b /mosquitto/config/pwfile.conf hgh 123456

image-20240330160310247

查看日志是否启动成功

mosquitto -v

这是使用最新版本的问题,报错了。。。具体原因不明

image-20240330212159083

使用旧版本后:

image-20240331122834841

重启mqtt服务

docker restart 容器ID

可能用到的命令

(1) 查看容器的挂载目录

docker inspect 容器名或ID | grep Source -A 1

(2) 进入容器内部

docker exec -it [容器名 或 容器ID] bash

若报错:OCI runtime exec failed: exec failed: unable to start container process: exec: “bash”: executable file not found in $PATH: unknown。可能是因为制作镜像时使用了精简版,只装了sh命令,未安装bash

可执行:

docker exec -it [容器名 或 容器ID] sh

(3) 设置容器自启动

docker update --restart=always <CONTAINER ID>

(4)查看容器报错日志

docker logs 容器ID

(5)删除镜像

docker rmi [imageId]

(6)重启docker

systemctl restart docker
attach与exec的主要区别

1、attach直接进入容器“启动命令”的终端,不会启动新的进程;
2、exec则是在容器中打开新的终端,并且可以启动新的进程;

标签:容器,log,data,MQTT,mosquitto,docker,config,Docker
From: https://blog.csdn.net/m0_74055560/article/details/143414250

相关文章