Docker -Pika Ошибка блокирующего соединения - PullRequest
0 голосов
/ 15 мая 2018

У меня есть док-контейнер, который запускает скрипт на python. Скрипт снабжен URL-адресом AMQP, который Пика использует в качестве pika.URLParameters для BlockingConnection. Когда я запускаю скрипт на моем компьютере, он работает нормально. Так как я его докертизировал и проверил журналы контейнера, я увидел, что сценарий зависает при попытке подключения. Вот код, который я использую в сценарии:

AMQP_URL = __prefix__ + __username__ + ":" + __password__ + __virtual__host + session
("The programm hangs here")
connection = pika.BlockingConnection(pika.URLParameters(AMQP_URL))
channel = connection.channel()
channel.exchange_declare(
                          exchange = "tmp.topic_2",
                          exchange_type = "topic"
                        )

result = channel.queue_declare(exclusive = True)

queue_name = result.method.queue

channel.queue_bind(
                    exchange = "amq.topic",
                    queue = queue_name,
                    routing_key = "ui.#"
                  )
channel.basic_consume(
                      UiCallback,
                      queue= queue_name,
                      no_ack=True
                     )
channel.start_consuming()

Я включил Пика в требования. Интересно, в чем проблема: Может быть, контейнер не может получить доступ к сети? Может быть, мне нужно настроить сервер rabbitmq в этом или другом контейнере? Спасибо за вашу помощь

1 Ответ

0 голосов
/ 04 июля 2018

Вам необходимо установить переменную среды RABBIT_HOST_IP для IP «хоста», на котором работает ваш докер-контейнер.

Насколько я понимаю, блокирующее соединение отправляет значения обратно на вызывающую его машину, которая работаетхорошо, но если вы находитесь внутри контейнера, отправленные обратно сообщения отправляются на IP-адрес контейнера докера, который недоступен с компьютера.

...