Контейнер Docker с именем хоста rabbitmq (с сервером EC2)

Я пытаюсь создать кластер RabbitMQ с узлами на отдельных машинах, используя докеры на каждой отдельной машине, и у меня возникают некоторые проблемы с подключением узлов. Когда я получаю имя хоста rabbitMQ, оно относится только к контейнеру, и из-за этого, когда я пытаюсь присоединить узел к кластеру, он терпит неудачу, потому что не может найти домен. Как я могу сообщить хосту RabbitMQ IP фактического сервера?

Я пытаюсь соединить узлы на одном сервере с узлами другого внешнего сервера, оба являются экземпляром EC2, но какая информация должна иметь имя хоста RabbitMQ относительно хоста экземпляра EC2, чтобы иметь возможность подключаться извне?

Если я использую ip-172-31-12-135.us-west-1.compute.internal, он не работает ...


person chuseuiti    schedule 25.02.2016    source источник
comment
Не знаю, поможет ли это, но вы можете запустить контейнер докеров с определенным именем хоста: docker run --hostname = Имя хоста контейнера ...   -  person Miguel Marques    schedule 26.02.2016


Ответы (1)


Чтобы создать кластер, все узлы rabbitmq, которые должны формировать кластер, должны быть доступны по имени узла (имени хоста). Вам нужно указать имя хоста для каждого контейнера докеров с параметром --hostname и добавить записи / etc / host для всех других контейнеров, это вы можете сделать с параметром --add-host или вручную отредактировав файл / etc / hosts. Итак, вот пример кластера из 3 узлов rabbitmq с контейнерами докеров (rabbitmq: 3-образ управления):

Сначала создайте сеть, чтобы можно было назначить IP-адреса: docker network create --subnet=172.18.0.0/16 mynet1. У нас будет следующее:

  • 3 докер-контейнера с именами rab1con, rab2con и rab3con
  • IP-адреса будут соответственно 172.18.0.11, -12 и -13.
  • каждый из них будет иметь имя хоста соответственно rab1, rab2 и rab3
  • все они должны использовать один и тот же файл cookie Erlang

Раскрутите первый

docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

второй

docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

последний

docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

Чем в contaner rab2con делать

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rab1
rabbitmqctl start_app

и то же самое в rab3con и все тут.

РЕДАКТИРОВАТЬ: поскольку вопрос касается сети докеров milti-host, следует использовать оверлейную сеть.

person cantSleepNow    schedule 26.02.2016
comment
Не могли бы вы предоставить дополнительную информацию о соединениях между внешними серверами? - person chuseuiti; 26.02.2016
comment
Они находятся в одной подсети и могут обращаться друг к другу в зависимости от имени хоста. Что еще тебе нужно? - person cantSleepNow; 26.02.2016
comment
Но я имею в виду докеры с RabbitMQ на разных серверах .. не несколько докеров на одних и тех же серверах. - person chuseuiti; 26.02.2016
comment
Извините, что пропустил. Затем используйте наложенную сеть docs.docker.com/engine/userguide / сеть / dockernetworks / - person cantSleepNow; 26.02.2016
comment
Спасибо, я добавил это к вашему ответу, так как у вас есть полное решение. Однако я собираюсь протестировать его, прежде чем давать полную проверку - person chuseuiti; 26.02.2016
comment
Пожалуйста, предоставьте свой комментарий относительно сети в качестве информации в ответе, поскольку без этого он не отвечает на мой вопрос. - person chuseuiti; 26.02.2016
comment
Добро пожаловать. Надеюсь, я понял, что вы сказали, и отредактировал ответ должным образом. - person cantSleepNow; 26.02.2016