그래서 외부 도커에서 연결할 수있는 toke / mosquitto 도커 컨테이너가 실행 중입니다.
그런 다음 모기 브로커에 데이터를 게시해야하는 Python 도커 컨테이너를 사용하고 있습니다. 내 코드는 다음과 같습니다.
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...")
코드는 docker에서 실행되지 않는 mqtt 브로커에 연결하려고 시도합니다.
하지만 둘 다 도커로 실행하고 서로 연결하는 방법을 알 수 없습니다. 내 오류 메시지는 다음과 같습니다.
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
이미 도커 네트워크를 사용하고 있습니다. 내가 무엇을 놓치고 있습니까?
도움을 주셔서 감사합니다 :)
Felipe에서 언급했듯이 docker를 사용할 때 localhost가 작동하지 않습니다. broker = "localhost"
mqtt에 대한 docker compose 파일에 정의한 서비스를 가리 키도록 변경 하거나 다른 네트워크에서 실행할 때 mqtt의 IP 주소를 가리 키도록 변경해야합니다 .
docker compose 파일이 mqtt를 mqtt ( mqtt: build mqtt:latest
) 로 참조하는 경우 브로커 변수를 다음 과 같이 변경해야합니다.broker = "mqtt"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다