You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化MQTT客户端与Broker连接失败:端口占用问题求助

解决MQTT客户端与Broker端口占用及连接拒绝问题

1. 移除Dockerfile中多余的端口声明

你的modbus容器是MQTT客户端,不需要监听1883端口,Dockerfile里的EXPOSE 1883属于无效配置,直接删除即可:

FROM python:3.12-slim

WORKDIR /app

ARG VERSION=1.0.0
COPY ./dist/modbus-${VERSION}-py3-none-any.whl .

RUN pip install --no-cache-dir modbus-${VERSION}-py3-none-any.whl

RUN mkdir -p /app/logs

CMD ["modbus"]

2. 修正MQTT Broker连接地址

在modbus程序中,不能用localhost:1883或主机IP连接Broker——容器处于独立的Docker网络空间,localhost指向容器自身而非mosquitto服务。需使用Docker Compose中定义的服务名mosquitto作为主机名,端口保持1883:

# 示例modbus程序中的MQTT连接代码
import paho.mqtt.client as mqtt

client = mqtt.Client()
client.connect("mosquitto", 1883, 60)

3. 排查主机端口占用(可选)

若仍提示主机1883端口被占用,执行命令检查本地是否有其他程序占用该端口:

# Linux/macOS
lsof -i :1883

# Windows
netstat -ano | findstr :1883

如果有其他程序占用,可停止该程序,或修改mosquitto容器的主机映射端口(比如改成1884:1883)——注意此时modbus程序仍需连接mosquitto:1883,无需调整客户端端口。

4. 验证容器网络连通性

重启容器后,可进入modbus容器测试与mosquitto的连通性:

# 测试域名解析
docker exec -it modbus ping mosquitto

# 测试端口连通
docker exec -it modbus telnet mosquitto 1883

内容的提问来源于stack exchange,提问作者Oswaldo Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:48:15