eclipse-mosquitto v2.0.12启动报Address in use无法发送MQTT消息问题
问题原因分析
该问题与配置文件权限无关,你已经确认配置文件权限为644、属主属组为mosquitto:mosquitto,权限侧无异常。
核心原因是eclipse-mosquitto 2.x版本加载配置的逻辑与1.6.x存在差异,当前你的服务加载了内置默认配置,自定义配置完全未生效,对应日志中的Using default config提示。
默认配置会引发两个直接异常:
- 2.x版本默认开启本地仅监听模式,仅绑定容器内部127.0.0.1的1883端口,不允许外部客户端连接
- 内置默认配置已经占用容器内的1883端口,自定义配置中的全局监听规则无法绑定,对应日志中的
Address in use报错
解决步骤
- 停止并删除现有异常容器
docker stop mosquitto && docker rm mosquitto
- 检查宿主机1883端口是否被其他进程占用,如有则先终止对应进程
ss -tulpn | grep 1883
- 修改容器启动命令,显式指定加载自定义配置文件,同时建议将日志存储和数据存储分开挂载,避免文件混杂:
docker run -itd \ --name="mosquitto" \ --restart always \ -p 1883:1883 \ -v /home/pi/.docker/mosquitto/mosquitto.conf:/mosquitto/config/mosquitto.conf \ -v mosquitto_data:/mosquitto/data \ -v mosquitto_log:/mosquitto/log \ eclipse-mosquitto \ mosquitto -c /mosquitto/config/mosquitto.conf
验证
容器启动后查看服务日志,将不再出现Using default config和Starting in local only mode提示。如果仍有加载默认配置的提示,可检查自定义配置文件是否存在语法错误、不可见字符或编码异常。调整完成后执行mosquitto_pub发布消息测试即可正常运行。
内容的提问来源于stack exchange,提问作者Qaldak
相关产品推荐
相关产品推荐

