Python 从一个docker容器连接到另一个[同一网络]时连接被拒绝
很难调试这个。我有一个容器启动MQTT服务器,另一个Python容器尝试连接 使用docker compose进行编排并建立网络,并将两个容器连接到该网络 目前,我可以使用docker run和docker compose独立地连接到MQTT服务器,但由于某些原因,Python containe无法连接 我想这可能是防火墙的问题 在main.py中,我正在打印MQTT_主机和MQTT_端口,我可以使用本地MOSQUITO客户端连接到这些主机和端口 docker-compose.ymlPython 从一个docker容器连接到另一个[同一网络]时连接被拒绝,python,docker,docker-compose,mqtt,Python,Docker,Docker Compose,Mqtt,很难调试这个。我有一个容器启动MQTT服务器,另一个Python容器尝试连接 使用docker compose进行编排并建立网络,并将两个容器连接到该网络 目前,我可以使用docker run和docker compose独立地连接到MQTT服务器,但由于某些原因,Python containe无法连接 我想这可能是防火墙的问题 在main.py中,我正在打印MQTT_主机和MQTT_端口,我可以使用本地MOSQUITO客户端连接到这些主机和端口 docker-compose.yml versi
version: "3.3"
services:
webserver:
build: ./webservice/server
ports:
- 3001:3001
- 3002:3002
networks:
- project-network
command: npm run start
inferemce:
build: ./inference
ports:
- 3003:3003
networks:
- project-network
depends_on:
- webserver
restart: on-failure
command: ["./wait-for-it.sh", "webserver:3001", "--", "python", "main.py"]
networks:
project-network:
driver: bridge
main.py
import socket
import paho.mqtt.client as mqtt
HOSTNAME = socket.gethostname()
IPADDRESS = socket.gethostbyname('localhost')
MQTT_HOST = IPADDRESS
MQTT_PORT = 3001
MQTT_KEEPALIVE_INTERVAL = 60
def connect_mqtt():
print('host', MQTT_HOST)
print('port', MQTT_PORT)
client = mqtt.Client()
client.connect(MQTT_HOST, MQTT_PORT, MQTT_KEEPALIVE_INTERVAL)
return client
def main():
client = connect_mqtt()
if __name__ == '__main__':
main()
您正在尝试连接到
localhost
,它将是python应用程序运行的容器,而不是webserver
更改python以尝试查找webserver
的地址,而不是localhost
import socket
import paho.mqtt.client as mqtt
HOSTNAME = socket.gethostname()
IPADDRESS = socket.gethostbyname('webserver')
MQTT_HOST = IPADDRESS
MQTT_PORT = 3001
MQTT_KEEPALIVE_INTERVAL = 60
...
多谢了,真管用!原因是什么,它是否与我的本地主机而不是网络主机匹配?每个容器都有自己的localhost很有意义,这也解释了为什么使用socket中的主机名时连接失败。gethostname()-可能是获取容器主机名。再次感谢!