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

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

时间:2024-10-31 18:17:28浏览次数:3  
标签:容器 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

相关文章

  • docker为什么适合devops
    在当今快速发展的软件开发周期中,Docker的出现无疑符合了DevOps的核心需求:高效性、一致性、可复制性、以及便捷性。它让开发和运维团队能够更快速地交付和更新软件应用。特别是Docker的容器技术,使得应用可以在分离的环境中运行,而不受宿主机环境的影响,同时保持轻量和快速。这种机制......
  • Window Docker 安装MySQL8.0全流程
    mysql部分转自:https://blog.csdn.net/weixin_42197001/article/details/138184306#mysql8_7一:安装dockerWindows中的Docker它可以依赖于两种环境,分别是:Hyper-V、WSL。第一种是一个虚拟环境,也就是虚拟机,第二中是Windows的Linux子系统(系统要求不低于Window10的2021版本)。我选......
  • Dockerfile 增强新语法
    Dockerfile是使用Docker的相关开发人员的基本工具,用来充当构建Docker镜像的模板,在这个文件中包含用户可以在命令行上调用来构建镜像的所有命令。了解并有效利用Dockerfile可以显着简化开发流程,实现镜像创建的自动化并确保不同开发阶段的环境一致。Dockerfile对于定义Dock......
  • 深入理解Docker,从入门到精通-Part3(高级进阶)
    一、仓库管理docker的仓库,存的就是镜像,所以仓库管理就是对镜像进行管理。在Docker里面一般有两类仓库:公共仓库(DockerHub官方仓库)和私人仓库(Registry和harbor)下面分别对这三种仓库进行介绍1、DockerHub仓库管理DockerHub是Docker公司维护的公共Registry,用户可以将......
  • openwrt解决docker拉取失败问题
    非原创,原文链接:loveyu.org/6115.html背景:在openwrt上的docker拉取失败,提示如下错误:root@openwrt:\~#dockerpulldebianErrorresponsefromdaemon:Get"https://registry-1.docker.io/v2/":contextdeadlineexceeded(Client.Timeoutexceededwhileawaitingheade......
  • Docker+Jenkins:一键自动化部署,让你的项目管理飞跃!
    使用Docker安装Jenkins并实现项目自动化部署是一种高效且便捷的方法。以下是详细的步骤和代码示例,帮助你完成这一过程。一、准备工作安装Docker:确保你的系统已经安装了Docker。如果没有安装,请参考 Docker官方文档进行安装。拉取Jenkins镜像:从DockerHub上拉取Je......
  • autMan奥特曼机器人-对接Docker版本NTQQ详细教程
    准备1、准备一台服务器,amd64/arm64都可以,配置最好还是2核保底吧。2、准备一个VNC软件。1Remote:点此下载3、准备手机登陆机器人QQ号,扫码NTQQ相关NTQQ一键脚本(适用于小白支持autMan/无界)复制以下代码,在服务器发送即可。按照提示步骤输入正确参数,如果出现输错可以自行去......
  • 内网机安装docker
    1)关闭防火墙关闭systemctlstopfirewalld禁止开机启动防火墙systemctldisablefirewalld2).下载docker的安装包:可以直接使用该链接进行下载:https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz也可访问官网选择匹配自己系统的版本进行下载:I......
  • MongoDB 部署指南:从 Linux 到 Docker 的全面讲解
    一、MongoDB简介MongoDB是一种NoSQL数据库,以文档模型存储数据,具备高性能、弹性扩展性和分布式架构等特点,非常适用于高并发和大数据量的场景。本文将从Linux和Docker环境开始讲解,帮助读者在不同环境下顺利部署MongoDB。二、在Linux(CentOS)上部署MongoDB2.1......
  • 猫头虎分享:2024最新 Docker 国内可用镜像源仓库地址
    ......