ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Eclipse Mosquitto 1.5 Docker 镜像实战指南:OpenSSL 变体的配置挂载、数据持久化与日志方案

Eclipse Mosquitto 1.5 Docker 镜像实战指南:OpenSSL 变体的配置挂载、数据持久化与日志方案 物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载本指南以仓库中 docker/1.5-openssl/README.md 为主线系统讲解 Eclipse Mosquitto 1.5 系列官方 Docker 镜像OpenSSL 构建变体的镜像构成、目录与卷布局、运行身份、自定义配置挂载、非默认端口暴露以及持久化与文件日志的完整配置方法。读完本文你将能够直接运行一个配置可挂载、数据可持久化、日志可落盘的 Mosquitto 1.5 容器并理解其构建与权限设计的底层原理。镜像定位1.5 系列中的 OpenSSL 变体在仓库的 docker/README.md 中明确说明1.5目录对应 Mosquitto 1.5 分支版本默认使用libressl而1.5-openssl目录与它identical except——唯一差异是改用openssl作为 TLS 实现并额外启用TLS-PSK预共享密钥支持。因此本文档对应的镜像是一个面向需要 OpenSSL 生态如依赖特定 OpenSSL 版本特性、习惯 OpenSSL 命令行的运维场景的官方变体。从 docker/1.5-openssl/Dockerfile 可以看到镜像的版本锚点ENV VERSION1.5.11 \ DOWNLOAD_SHA2564a3b8a8f5505d27a7a966dd68bfd76f1e69feb51796d1b46b7271d1bb5a1a299 \ GPG_KEYSA0D6EEA1DCAE49A635A3B2F0779B22DFB3E717B7 \ LWS_VERSION4.2.1 \ LWS_SHA256842da21f73ccba2be59e680de10a8cce7928313048750eb6ad73b6fa50763c51基础镜像为alpine:3.18内置 Mosquitto 版本固定为1.5.11WebSocket 支持依赖静态构建的libwebsockets 4.2.1。与 1.5 系列另一个变体的构建差异可从 docker/1.5/Dockerfile 对照看出非 openssl 版本安装的是libressl-dev且编译参数为WITH_TLS_PSKno而本镜像使用openssl-dev并保留 TLS-PSK 能力这也是两个镜像唯一的实质区别。从发布 tarball 构建校验链设计镜像不是从仓库源码构建而是build as source from published tarballs从官方发布包构建。Dockerfile 的关键步骤体现了供应链校验下载mosquitto-1.5.11.tar.gz用DOWNLOAD_SHA256做 SHA-256 校验Dockerfile下载同名.asc签名文件从多个密钥服务器获取维护者 GPG 公钥A0D6EEA1DCAE49A635A3B2F0779B22DFB3E717B7并执行gpg --batch --verify签名验证Dockerfile任一密钥服务器失败即构建中止。编译时启用的特性包括WITH_WEBSOCKETSyes、WITH_SHARED_LIBRARIESyes、WITH_STRIPyes关闭了WITH_ADNS、WITH_DOCS、WITH_SRV。最终装入镜像的二进制有/usr/sbin/mosquitto、/usr/bin/mosquitto_pub、/usr/bin/mosquitto_sub、/usr/bin/mosquitto_passwd以及客户端库/usr/lib/libmosquitto.so.1——也就是说容器内既可以直接跑 broker也可以顺手执行mosquitto_pub/mosquitto_sub做连通性自测。容器内目录布局挂载点与卷文档定义了三个核心路径其中/mosquitto/config是配置挂载点/mosquitto/data与/mosquitto/log是两个持久化卷/mosquitto/config /mosquitto/data /mosquitto/log它们在 Dockerfile 中通过mkdir -p /mosquitto/config /mosquitto/data /mosquitto/log创建并在 Dockerfile 中声明为卷VOLUME [/mosquitto/data, /mosquitto/log]注意VOLUME只声明/mosquitto/data与/mosquitto/log为匿名卷而/mosquitto/config是普通挂载点官方建议你在运行时以-v显式挂载配置。镜像默认命令Dockerfile为COPY docker-entrypoint.sh / EXPOSE 1883 ENTRYPOINT [/docker-entrypoint.sh] CMD [/usr/sbin/mosquitto, -c, /mosquitto/config/mosquitto.conf]即容器启动后直接以/mosquitto/config/mosquitto.conf作为配置文件启动 broker。构建时 Dockerfile 已将发行包自带的mosquitto.conf安装到该路径因此在未挂载任何配置的情况下容器会使用默认配置值运行——这就是 README 中When creating a container from the image, the default configuration values are used的实际来源。入口脚本root 权限下的属主修复镜像的入口是 docker-entrypoint.sh脚本逻辑极简#!/bin/ash set -e user$(id -u) if [ $user 0 ]; then [ -d /mosquitto ] chown -R mosquitto:mosquitto /mosquitto || true fi exec $其作用是当容器以root启动时将/mosquitto及其子目录config/data/log递归chown给 mosquitto 用户随后exec $替换为mosquitto -c ...进程。这一设计的价值在于当你把宿主机目录挂载进/mosquitto/data或/mosquitto/log时挂载卷的属主会被修正为容器内 broker 运行用户避免因权限不匹配导致无法写数据或写日志。若以非 root 用户运行容器则跳过该步骤。运行身份uid/gid 均为 1883文档明确镜像以mosquitto用户/组运行 brokeruid 和 gid 均为1883。这一数字刻意与 MQTT 默认端口 1883 保持一致便于运维记忆。创建过程在 Dockerfileaddgroup -S -g 1883 mosquitto 2/dev/null \ adduser -S -u 1883 -D -H -h /var/empty -s /sbin/nologin -G mosquitto -g mosquitto mosquitto 2/dev/null该用户是系统用户-S、无登录 shell/sbin/nologin、无 home 目录符合最小权限原则。配合 mosquitto.conf 中user mosquitto的降权机制当以 root 启动时自动降权到指定用户broker 全程以低权限身份运行。对挂载卷的实操含义如果你用-v /host/path:/mosquitto/data挂载宿主机目录建议让宿主机目录的属主为 uid/gid 1883例如chown 1883:1883 /host/path或依赖入口脚本在 root 启动时自动修正属主。使用自定义配置挂载本地 mosquitto.conf当默认配置不满足需求时将宿主机上的本地配置文件挂载到容器的/mosquitto/config/mosquitto.conf即可覆盖镜像内默认配置。文档给出的基础命令docker run -it -p 1883:1883 -v absolute-path-to-configuration-file:/mosquitto/config/mosquitto.conf eclipse-mosquitto:version要点拆解absolute-path-to-configuration-file必须是绝对路径否则 Docker 的-v绑定挂载会解析失败-p 1883:1883将容器内 1883 端口映射到宿主机挂载目标必须是/mosquitto/config/mosquitto.conf与CMD中-c参数一致eclipse-mosquitto:version中的version对应镜像标签例如本镜像对应的1.5.11标签。端口变更时的联动调整文档特别以:boom:强调了一个极易踩坑的点若修改了mosquitto.conf中的监听端口docker run的-p暴露参数必须同步更新否则容器内 broker 已在新端口监听但宿主机未做端口映射外部将无法访问。示例新增 8080 端口的 WebSocket 监听docker run -it -p 1883:1883 -p 8080:8080 -v absolute-path-to-configuration-file:/mosquitto/config/mosquitto.conf eclipse-mosquitto:version从配置语义看这对应 mosquitto.conf 中的listener port-number [ip address/host name/unix socket path]语法例如listener 1883 listener 8080 protocol websockets启用数据持久化与文件日志文档给出的推荐改造是在挂载配置中加入三行persistence true persistence_location /mosquitto/data/ log_dest file /mosquitto/log/mosquitto.logpersistence / persistence_location落盘位置persistence true开启持久化将内存数据库订阅、飞行中的 QoS 1/2 消息、保留消息等写入磁盘persistence_location /mosquitto/data/指定持久化数据库目录恰好落在镜像声明的数据卷内。对应 mosquitto.conf 的完整语义持久化文件名默认是mosquitto.dbpersistence_file mosquitto.db默认每 1800 秒自动保存一次autosave_interval 1800也可通过SIGUSR1信号强制落盘。此外persistence_location还支持通过环境变量MOSQUITTO_PERSISTENCE_LOCATION覆盖配置文件若两者同时设置环境变量优先这在容器编排场景中颇为实用。log_dest file文件日志log_dest file /mosquitto/log/mosquitto.log将日志写到/mosquitto/log/下的文件而非默认的 stderr。对应 mosquitto.conf 中的说明log_dest可配置多个目标支持stdout、stderr、syslog、topic、file、dlt等file目标必须附带文件路径参数且只能配置一个文件目标broker 收到 HUP 信号时会关闭并重新打开日志文件便于配合logrotate做日志轮转可配合log_typeerror、warning、notice、information、subscribe、websockets等与connection_messages true控制日志粒度。卷数据的生命周期文档末尾的 Note 是容器使用的关键纪律任何挂载的卷其数据在容器之间都是持久保留的。也就是说即使删除并重建容器只要复用同一卷或重新挂载同一宿主机目录持久化数据库与日志文件依然存在。这意味着升级镜像时数据不会因容器重建而丢失反之若不做持久化不挂载卷、不开启 persistenceMQTT 订阅状态与保留消息会在容器删除后全部丢失。验证思路与进一步资料运行后可用容器内置客户端自测docker exec -it container mosquitto_sub -t $SYS/# -C 1观察$SYS树是否持续更新$SYS的发布间隔由 mosquitto.conf 的sys_interval控制默认 10 秒查看数据持久化效果进入容器检查/mosquitto/data/mosquitto.db是否存在并持续增长查看日志效果docker exec -it container tail -f /mosquitto/log/mosquitto.log更完整的配置项说明可查阅 man/mosquitto.conf.5.xml即mosquitto.conf(5)手册页源码持久化与日志相关配置的解析实现位于 src/conf.c。小结本文档对应的1.5-openssl镜像本质上是1.5 系列 OpenSSL/TLS-PSK的官方变体其使用模型围绕三个目录展开/mosquitto/config承载可挂载的配置、/mosquitto/data承载持久化数据、/mosquitto/log承载文件日志broker 以 uid/gid 1883 的 mosquitto 用户运行入口脚本负责在 root 启动时修正挂载目录属主。只需牢记两条铁律——修改监听端口必须同步调整-p映射、卷数据在容器间持久保留——即可在生产环境中稳定地以容器方式运行 Mosquitto 1.5。赞分享物联网消息队列后端网络/通信【免费下载链接】mosquittoEclipse Mosquitto - An open source MQTT broker项目地址https://gitcode.com/gh_mirrors/mo/mosquitto点击查看免费下载相关推荐Eclipse Mosquitto 2.0 OpenSSL 版 Docker 镜像实战指南配置挂载、认证授权与数据持久化Eclipse Mosquitto 2.0 OpenSSL 版 Docker 镜像实战指南配置挂载、认证授权与数据持久化 导读 本文以 docker/2.0物联网消息队列后端网络/通信Eclipse Mosquitto 1.5 Docker 镜像使用指南挂载点、用户权限与持久化配置Eclipse Mosquitto 1.5 Docker 镜像使用指南挂载点、用户权限与持久化配置 本文围绕 Mosquitto 仓库中 docker/1.5物联网消息队列后端网络/通信Eclipse Mosquitto 2.1 Alpine Docker 镜像实战配置挂载、认证授权与持久化指南Eclipse Mosquitto 2.1 Alpine Docker 镜像实战配置挂载、认证授权与持久化指南 Eclipse Mosquitto 官方 Do后端消息队列消息路由上一篇三步搞定国家中小学智慧教育平台电子课本下载的完整指南下一篇React Komposer 依赖注入与环境配置实现灵活的数据源管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表