首页 > 解决方案 > Docker-Compose 使用 python 连接到远程 MQTT 代理

问题描述

对 Docker-Compose 来说完全是新手,我有点反复打脸。我尝试通过 docker-compose 连接到现有的 mqtt 代理(我在另一台电脑上的代理),并使用独立运行的测试 python 脚本。

这是 Python 测试脚本。我也尝试在终端打印,但没有运气。因此,对此也很感激。

import json
import base64
import binascii
import time
import datetime
from collections import defaultdict
import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import ssl

def on_message(mosq, obj, msg):
    print(msg.topic + " " + str(msg.qos) + " " + str(msg.payload))

def on_connect(client, userdata, a, b):
    print("Connected to Broker")




def on_disconnect(client, userdata, rc):
    print("Disconnected from MQTT server with code: ", rc)


mqttc = mqtt.Client(client_id="RELAY", clean_session=False)
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_disconnect = on_disconnect
mqttc.connect("1.1.1.2", 1883, 60)

mqttc.loop_start()

counter = 0 
while True:
    print("Sending MSG")
    counter=counter+1
    response="MESSAGE No: "+ str(counter) 
    mqttc.publish("Walrus/test", response)

    time.sleep(30)

这是我尝试过的数千个 yml 文件实例之一。

version: '3'
services:
  mqtt:
     broker: 1.1.1.2
     port:1883

此实例仅返回代理不受支持的配置选项

这是 Dockerfile

FROM python:3.6.1-alpine

ADD . /pyapp
WORKDIR /pyapp
ENV PATH=/home/ubuntu/.virtualenvs/bin:$PATH
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
RUN pip install -r requirements.txt

EXPOSE 1883

CMD ['python', '-u', 'app.py']

我见过的任何教程都是创建代理或将代理用作服务/包。我认为我想做的事情要简单得多,但我还没有找到教程。我知道我缺少一些基本的东西。任何帮助表示赞赏。

标签: pythondockerdocker-composemqtt

解决方案


您不能在 docker-compose 文件中指定外部代理,它用于指定您使用 docker 创建的服务。

您可以做的最好的事情是将远程代理的详细信息作为环境变量包含在要传递给您的脚本的环境变量中。

您的脚本容器的行也没有意义,EXPOSE 1883因为它是客户端而不是“服务器”。

正如评论中提到的,在尝试做一些不同的事情之前,您应该完全按照教程进行操作,以便在如何使用 docker-compose 构建复合服务方面获得良好的基础。


推荐阅读