Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从一个docker容器连接到另一个[同一网络]时连接被拒绝_Python_Docker_Docker Compose_Mqtt - Fatal编程技术网

Python 从一个docker容器连接到另一个[同一网络]时连接被拒绝

Python 从一个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

很难调试这个。我有一个容器启动MQTT服务器,另一个Python容器尝试连接

使用docker compose进行编排并建立网络,并将两个容器连接到该网络

目前,我可以使用docker run和docker compose独立地连接到MQTT服务器,但由于某些原因,Python containe无法连接

我想这可能是防火墙的问题

在main.py中,我正在打印MQTT_主机和MQTT_端口,我可以使用本地MOSQUITO客户端连接到这些主机和端口

docker-compose.yml

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()-可能是获取容器主机名。再次感谢!