В соединении отказано при подключении из одного контейнера docker к другому [та же сеть] - PullRequest
0 голосов
/ 16 июня 2020

Трудно отладить это. У меня есть один контейнер, запускающий сервер MQTT, а другой контейнер Python пытается подключиться.

Использование docker -compose для оркестровки и настройки сети и подключения к ней обоих контейнеров.

В настоящее время я могу подключиться к серверу MQTT независимо с помощью docker run и docker -compose, но содержимое 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()

1 Ответ

1 голос
/ 16 июня 2020

Вы пытаетесь подключиться к 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
...
...