当前位置: 首页 > news >正文

深入解析:mosquitto求医之路(3):Docker安装也不好使

深入解析:mosquitto求医之路(3):Docker安装也不好使

折腾好久Mosquitto还是起不来,最后逼上梁山只能用docker。
--先卸载
localhost:/var/log/mosquitto # systemctl stop mosquitto
localhost:/var/log/mosquitto # zypper remove mosquitto mosquitto-clients
Reading installed packages...
Resolving package dependencies...
The following 2 packages are going to be REMOVED:
mosquitto mosquitto-clients
2 packages to remove.
Package install size change:
| 0 B required by packages that will be installed
-1017.2 KiB | - 1017.2 KiB released by packages that will be removed

Backend: classic_rpmtrans
Continue? [y/n/v/...? shows all options] (y): y
Removed "/etc/systemd/system/multi-user.target.wants/mosquitto.service".
warning: /etc/mosquitto/mosquitto.conf saved as /etc/mosquitto/mosquitto.conf.rpmsave
(1/2) Removing: mosquitto-2.0.21-bp156.2.6.1.x86_64 ....................................................................................................................................................[done]
(2/2) Removing: mosquitto-clients-2.0.21-bp156.2.6.1.x86_64 ............................................................................................................................................[done]
--清理残留的文件和文件夹
localhost:/var/log/mosquitto # rm -rf /etc/mosquitto/
localhost:/var/log/mosquitto # rm -rf /var/log/mosquitto/
localhost:/var/log/mosquitto # rm -rf /var/lib/mosquitto/

--清理用户和用户组mosquitto
localhost:/var/log/mosquitto # userdel -r mosquitto 2>/dev/null || true
localhost:/var/log/mosquitto # getent group mosquitto

--重置服务
localhost:/var/log/mosquitto # rm -f /etc/systemd/system/mosquitto.service
localhost:/var/log/mosquitto # systemctl daemon-reload
localhost:/var/log/mosquitto # systemctl reset-failed mosquitto.service 2>/dev/null || true

--检查残留信息
localhost:/var/log/mosquitto # rpm -qa | grep -i mosquitto
libmosquitto1-2.0.21-bp156.2.6.1.x86_64
localhost:/var/log/mosquitto # sudo rpm -e libmosquitto1-2.0.21-bp156.2.6.1.x86_64
localhost:/var/log/mosquitto # getent group mosquitto
localhost:/var/log/mosquitto # id mosquitto

--安装mosquitto docker
localhost:/home # mkdir mosquitto
localhost:/home # cd mosquitto
localhost:/home/mosquitto # ls
localhost:/home/mosquitto # docker pull eclipse-mosquitto:latest
latest: Pulling from library/eclipse-mosquitto
9824c27679d3: Already exists
8be3a6e695b8: Pull complete
e661fc39aa0a: Pull complete
Digest: sha256:d219d3a72847f3aed6a1d66975972d3b17f86e39e8f6f6b86b4088b879c1a2d6
Status: Downloaded newer image for eclipse-mosquitto:latest
docker.io/library/eclipse-mosquitto:latest
localhost:/home/mosquitto # sudo docker run -d --name mosquitto \
> -p 1883:1883 \
> -p 9001:9001 \
> -v /home/mosquitto/config:/mosquitto/config \
> -v /home/mosquitto/data:/mosquitto/data \
> -v /home/mosquitto/log:/mosquitto/log \
> eclipse-mosquitto
8988291b554430e7c8b94a76c8d4260547b5725172a3f43ed13d2f839fa57af1
虽然成功启动docker,但是再在我的本地目录中不存在配置文件mosquitto.conf。

--转用docker-compose.yaml,先创建文件

version: '3'

services:
mosquitto:
image: eclipse-mosquitto:latest
container_name: mosquitto
restart: unless-stopped
ports:
- "1883:1883"
- "9001:9001"
volumes:
- ./config:/mosquitto/config
- ./data:/mosquitto/data
- ./log:/mosquitto/log
- ./var:/var/run/mosquitto
# 首次运行时,从容器内复制默认配置到本地卷
command: sh -c "cp -n /mosquitto/config_orig/* /mosquitto/config/ 2>/dev/null || true && /usr/sbin/mosquitto -c /mosquitto/config/mosquitto.conf"

--启动,还是没有mosquitto.conf文件
应用docker-compose.yml指定也不行,那就只能手动创建mosquitto.conf
让deepseek推荐了一个,拷贝粘贴搞定。AI就是好,这个真的要省很多事。
# ========================
# Mosquitto MQTT Broker 配置
# ========================
# 基础设置
# 允许守护进程模式(在后台运行)
daemon false
# 设置进程ID文件位置
pid_file /var/run/mosquitto.pid
# 监听器设置
# 主MQTT监听器 - 监听所有网络接口的1883端口
listener 1883 0.0.0.0
protocol mqtt

# 可选:WebSocket监听器(如需浏览器客户端连接)
# listener 9001 0.0.0.0
# protocol websockets

# 安全设置
# 允许匿名连接(生产环境中应设置为false并配置密码)
allow_anonymous false

# 密码文件路径(如果启用密码认证)
password_file /mosquitto/config/passwd

# ACL访问控制列表文件路径(如需细粒度权限控制)
# acl_file /mosquitto/config/aclfile

# 持久化设置
# 启用持久化存储(存储订阅信息和保留消息)
persistence true

# 持久化资料存储位置
persistence_location /mosquitto/data/

# 持久化数据库文件
persistence_file mosquitto.db

# 自动持久化间隔(秒)
# autosave_interval 1800

# 日志设置
# 将日志输出到文件
log_dest file /mosquitto/log/mosquitto.log

# 包括所有类型的日志信息
log_type all

# 可选:同时输出到标准输出(便于Docker日志查看)
log_dest stdout

# 连接设置
# 最大同时连接数(默认-1表示无限制)
# max_connections -1

# 消息设置
# 消息最大大小(字节,默认约268MB)
# message_size_limit 0

# 保留消息承受
# retain_available true

# 每个客户端的最大排队消息数
# max_queued_messages 1000

# 桥接设置(如需连接其他MQTT代理)
# connection bridge-to-broker2
# address broker2.example.com:1883
# topic # both 0

启动失败就是--还

localhost:/home/mosquitto # docker-compose up -d
localhost:/home/mosquitto# docker logs mosquitto
1758371638: Error: Unable to open config file /mosquitto/config/mosquitto.conf.
1758371639: Error: Unable to open config file /mosquitto/config/mosquitto.conf.
1758371640: Error: Unable to open config file /mosquitto/config/mosquitto.conf.
1758371641: Error: Unable to open config file /mosquitto/config/mosquitto.conf.

目录权限问题。就是--再改权限:还是起不来,还
localhost:/home/mosquitto # chown -R 1000:1000 /home/mosquitto/config/
localhost:/home/mosquitto # chmod 644 /home/mosquitto/config/mosquitto.conf
还是同样错误。
--注释掉配置文件mosquitto.conf中的
# 允许守护进程模式(在后台运行)
daemon false --注销掉
老错误没有了,新错误出现:
localhost:/home/mosquitto/config # docker logs mosquitto
1758372875: Error: Unable to write pid file.

继续配置文件将 pidfile注释掉,不再报错,可是还是文件访问错误。
localhost:/home/mosquitto/config # docker logs mosquitto
1758374776: mosquitto version 2.0.22 starting
1758374776: Config loaded from /mosquitto/config/mosquitto.conf.
1758374776: Error: Unable to open pwfile "/mosquitto/config/passwd".
还是权限困难。

--Deepseek也弄休克了
问deepseek,翻来覆去就是让改权限,问多了它就习惯性装死,你重开一个话题,它又是一个循环,deepseek这个医生有时候不太行。

http://www.hskmm.com/?act=detail&tid=15477

相关文章:

  • 在K8S中,在服务上线的时候Pod起不来怎么进行排查?
  • 在线教育软件开发的全流程解析与优化方案
  • 在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
  • 在K8S中,如果是因为开发写的镜像问题导致pod起不来该怎么排查?
  • 上海应用大学网课自动化学习脚本(基于Python selenium)代码重构为GUI界面 —— 技术笔记
  • 在K8S中,Deployment⽀持扩容吗?它与HPA有什么区别?
  • 开源语音识别FunASR入门详解
  • AT_abc201_f [ABC201F] Insertion Sort 题解
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • c语言动态内存分配
  • 2025.9.24——1橙
  • AT_arc172_d [ARC172D] Distance Ranking
  • Python爬虫实现大乐透历史数据抓取
  • 【读书笔记】《深入理解计算机系统(原书第三版)》第一章 计算机系统漫游
  • 如何将PPT每一页批量导出为高清JPG图片?一文讲清处理流程
  • 实用指南:计算机视觉:基于YOLOv11 实例分割与OpenCV 在 Java 中的实现图像实例分割
  • Java实现双色球历史是否中奖查询
  • ABC424 游记(VP)
  • Java实现大乐透历史是否中奖查询
  • 阿德勒的课题分离是很好用的东西
  • 别再混淆 PHP8.1 中纤程 Fibers 和协程 Coroutines 了 一文搞懂它们的区别
  • 主要测试的测试用例
  • 详细介绍Seata的AT模式分布式事务
  • VMware VeloCloud 漏洞分析:未授权远程代码执行全链条攻破
  • 【GitHub每日速递 250924】18 个 AI 投资大师齐上阵!这个开源对冲基金让你看透市场底牌
  • HJ9 提取不重复的整数
  • 2025年国家科技奖初评公布(科技进步奖)
  • 2025年国家科技奖初评公布(科技发明奖)
  • 12
  • 2025年国家科技奖初评公布(自然科学奖)