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

Docker环境下Python+MQTT可发布但无法接收消息问题

Docker环境下Flask-MQTT订阅无SUBACK但发布正常的问题

我运行了两个Docker容器:一个是基于Mosquitto的MQTT服务器,另一个使用flask_mqtt。
Flask容器能够接收CONNACK并向代理发送订阅请求,但始终无法收到SUBACK;不过它可以成功向home/mytopic发布消息(已通过mqtt-explorer验证)。
这一情况十分奇怪,因为该功能在Docker环境外运行完全正常。

docker-compose配置

services:
  mqtt:
    container_name: mqtt_container
    image: eclipse-mosquitto:latest
    networks:
      - local_net
    ports:
      - "1883:1883"
    volumes:
      - ./MqttServer/:/mosquitto/config/:rw
  flask:
    container_name: flask_container
    build:
      context: Api
      dockerfile: Dockerfile
    networks:
      - local_net
    ports:
      - "80:80"

networks:
  local_net:
    external: false

Flask的Dockerfile配置

FROM python:latest

COPY requirements.txt /
RUN pip3 install -r /requirements.txt

COPY . /app
WORKDIR /app

# ENTRYPOINT ["gunicorn", "main:app", "-w", "1", "-b", "0.0.0.0:80"]
ENTRYPOINT ["python", "main.py"]

main.py代码

from flask import Flask
from flask_mqtt import Mqtt
from flask_restx import Api, Resource

app = Flask(__name__)

app.config['MQTT_BROKER_URL'] = "mqtt"
app.config['MQTT_BROKER_PORT'] = 1883
app.config['MQTT_KEEPALIVE'] = 60

mqtt = Mqtt(app)

api = Api(
    app=app,
    title='xxx',
    description='yyy',
    version='1.0.0',
)


@mqtt.on_connect()
def handle_connect(client, userdata, flags, rc):
    if rc == 0:
        print("connection established")
        mqtt.subscribe('home/mytopic')
    else:
        print("connection error")


@mqtt.on_message()
def handle_mqtt_message(client, userdata, message):
    print("i'm here")
    data = dict(
        topic=message.topic,
        payload=message.payload.decode()
    )
    print(data)


@mqtt.on_log()
def handle_logging(client, userdata, level, buf):
    print(buf)


@api.route('/test')
class Airflow(Resource):
    def get(self):
        mqtt.publish('home/mytopic', "hello world")

    def post(self):
        pass


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80, debug=False, use_reloader=False)

内容的提问来源于stack exchange,提问作者Tx Mat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:35:20