繁体   English   中英

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

[英]Connection refused when connecting from one docker container to another [same network]

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

使用 docker-compose 编排并建立了一个网络并将两个容器连接到它。

目前我可以通过运行 docker 和 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

主文件

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
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM