无法从 Python Docker 连接到 mqtt Docker

vro*_*ogg 5 mqtt docker mosquitto docker-compose docker-network

所以我有一个正在运行的 toke/mosquitto docker 容器,我可以从外部 docker 连接到它。

然后我使用 Python docker 容器将数据发布到我的 mosquitto 代理。这是我的代码:

import paho.mqtt.client as paho
import time
import random

broker = "localhost"
port = 1883


def on_publish(client, userdata, result):
    print("Device 1 : Data published.")
    pass

client = paho.Client("admin")
client.on_publish = on_publish
client.connect(broker, port)

for i in range(20):
    d = random.randint(1, 5)

    # telemetry to send
    message = "Device 1 : Data " + str(i)
    time.sleep(d)

    # publish message
    ret = client.publish("/data", message)

print("Stopped...")
Run Code Online (Sandbox Code Playgroud)

该代码尝试连接到未在 docker 中运行的 mqtt 代理。

但我不知道如何让两者都与 docker 一起运行并相互连接。我的错误信息是:

Traceback (most recent call last):
  File "./pub_client1.py", line 15, in <module>
    client.connect(broker, port)
  File "/usr/local/lib/python3.8/site-packages/paho/mqtt/client.py", line 937, in connect
    return self.reconnect()
  File "/usr/local/lib/python3.8/site-packages/paho/mqtt/client.py", line 1071, in reconnect
    sock = self._create_socket_connection()
  File "/usr/local/lib/python3.8/site-packages/paho/mqtt/client.py", line 3522, in _create_socket_connection
    return socket.create_connection(addr, source_address=source, timeout=self._keepalive)
  File "/usr/local/lib/python3.8/socket.py", line 808, in create_connection
    raise err
  File "/usr/local/lib/python3.8/socket.py", line 796, in create_connection
    sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)

我已经在使用 docker 网络了。我缺少什么?

已经感谢您的帮助:)

Lam*_*mbo 4

正如 Felipe 提到的,使用 docker 时 localhost 将不起作用。您必须更改 broker = "localhost"为指向您在 docker compose 文件中为 mqtt 定义的服务,或者在不同网络上运行时指向 mqtt 的 IP 地址。

如果您的 docker compose 文件将 mqtt 引用为 mqtt ( mqtt: build mqtt:latest) 那么您需要将代理变量更改为broker = "mqtt"