【问题标题】:Connection refused when connecting from one docker container to another [same network]从一个 docker 容器连接到另一个 [相同网络] 时连接被拒绝
【发布时间】:2020-06-16 19:29:06
【问题描述】:

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

使用 docker-compose 进行编排并设置网络并将两个容器连接到它。

目前我可以使用 docker run 和 docker-compose 独立连接到 MQTT 服务器,但是 Python 容器由于某种原因无法连接。

我认为这可能是防火墙问题?

在 main.py 中,我正在打印 MQTT_HOST 和 MQTT_PORT,我实际上可以使用本地 Mosquitto 客户端连接到那些。

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()

【问题讨论】:

    标签: python docker docker-compose mqtt


    【解决方案1】:

    您正在尝试连接到 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
    ...
    

    【讨论】:

    • 非常感谢,成功了!这是什么原因,是和我的本地主机匹配而不是网络主机吗?
    • 每个容器都有自己的本地主机
    • 有道理,这也解释了为什么在使用来自 socket.gethostname() 的 HOSTNAME 时连接失败 - 可能是获取容器主机名。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2019-12-28
    相关资源
    最近更新 更多