无法从 Python Docker 连接到 mqtt Docker
Can't connect from Python Docker to mqtt Docker
所以我有一个 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...")
代码在尝试连接到未 运行ning 的 mqtt 代理时有效 docker。
但我不知道如何让 运行 和 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
我已经在使用 docker 网络。我错过了什么?
已经感谢您的帮助:)
该代码正在尝试连接 localhost。容器就像另一台计算机,因此当您使用 localhost 时,您正在连接容器本身。
您必须将该代码与 mqtt 服务所在的计算机连接 运行。您可以尝试使用该计算机的显式 IP 或使用 DNS(如果有的话)。
如 Felipe 所述,使用 docker 时 localhost 将不起作用。你必须改变
broker = "localhost"
指向您在 docker compose 文件中为 mqtt 定义的服务,或者 运行 在不同网络上时指向 mqtt 的 IP 地址。
如果您的 docker 撰写文件将 mqtt 引用为 mqtt (mqtt: build mqtt:latest
),那么您需要将代理变量更改为 broker = "mqtt"
所以我有一个 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...")
代码在尝试连接到未 运行ning 的 mqtt 代理时有效 docker。
但我不知道如何让 运行 和 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
我已经在使用 docker 网络。我错过了什么?
已经感谢您的帮助:)
该代码正在尝试连接 localhost。容器就像另一台计算机,因此当您使用 localhost 时,您正在连接容器本身。
您必须将该代码与 mqtt 服务所在的计算机连接 运行。您可以尝试使用该计算机的显式 IP 或使用 DNS(如果有的话)。
如 Felipe 所述,使用 docker 时 localhost 将不起作用。你必须改变
broker = "localhost"
指向您在 docker compose 文件中为 mqtt 定义的服务,或者 运行 在不同网络上时指向 mqtt 的 IP 地址。
如果您的 docker 撰写文件将 mqtt 引用为 mqtt (mqtt: build mqtt:latest
),那么您需要将代理变量更改为 broker = "mqtt"