подключение от одного docker к другому с использованием переадресации портов и сбоя сети = хоста - PullRequest
0 голосов
/ 20 февраля 2020

Я написал приложение в python3 .7.5, которое подключается к RabbitMQ:

Используя Ubuntu в качестве docker -машины

Я запускаю rabbitmq с docker:
docker run --name rabbitmq -p 5671:5671 -p 5672:5672 -p 15672:15672 --hostname rabbitmq rabbitmq:3.6.6-management

ТЕСТ:

  • Мое python приложение подключается к нему через 127.0.01: 5672

  • Ожидаемый: подключается и работает

  • Актуально: подключается и работает

Я помещаю приложение внутрь docker, собираю и запускаю

--build-arg ENVIRONMENT_NAME=develop
-t pdf-svc-image:latest .
&& docker run
-P
--env ENVIRONMENT_NAME=local
--name html-to-pdf
-v /home/mickey/dev/core/components/pdf-svc/:/html-to-pdf
--privileged
--network host
pdf-svc-image:latest bash

( Эта командная строка создается с помощью pycharm)

При выполнении этого кода (внутри docker) я получаю исключение


return await aio_pika.connect_robust(
            "amqp://guest:guest@{host}".format(host=consts.MESSAGE_QUEUE_HOST)
        )
  • [Errno 111] Ошибка вызова подключения ( '127.0.0.1', 5672)
  • [Errno 99] Невозможно назначить запрошенный адрес

Справка?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Контейнер RabbitMQ

  docker run --name rabbitmq \
      -p 5671:5671 -p 5672:5672 -p 15672:15672 \
      --hostname rabbitmq \
      --network host \      # <-- Add this line, now both container see each other
      rabbitmq:3.6.6-management

Контейнер приложения

  docker run \
      -P \
      --env ENVIRONMENT_NAME=local \
      --name html-to-pdf \
      -v /home/mickey/dev/core/components/pdf-svc/:/html-to-pdf \
      --privileged \
      --network host \
      pdf-svc-image:latest bash

Затем в вашем коде необходимо загрузить переменную с host = rabbitmq, а не с 127.0.0.1.

0 голосов
/ 20 февраля 2020

Согласно https://docs.docker.com/network/host/,

Примечание. Учитывая, что у контейнера нет собственного IP-адреса при использовании режима хоста, сопоставление портов не выполняется эффект, а опции -p, --publi sh, -P и --publi sh -all игнорируются, вместо этого выдается предупреждение:

Я не уверен, что это твой случай. Вы должны войти в контейнер и выполнить ping, nslookup для проверки сетевого подключения.

...