Статус RabbitMQ в другом докер-контейнере

Я запускаю докер-контейнер с RabbitMQ для тестирования. Я хотел бы запустить второй контейнер, который выполняет короткую команду и проверяет, действительно ли Rabbitmq запущен. Второй контейнер должен блокировать мой конвейер сборки до тех пор, пока он не определит, что RabbitMQ успешно запущен в первом контейнере.

Как я могу указать rabbitmqctl, какое имя хоста использовать для получения статуса RabbitMq? Я связываю два контейнера вместе через докер, поэтому проблемы с портом не должны быть проблемой.

Пример:

rabbitmqctl -n rabbitmq status # does not work, prints diagnostic info

Состояние узла rabbitmq @ rabbitmq ... Ошибка: невозможно выполнить операцию на узле rabbitmq @ rabbitmq. См. Информацию о диагностике и предложения ниже.

Наиболее частые причины этого:

  • Целевой узел недоступен (например, из-за разрешения имени хоста, проблем с TCP-соединением или брандмауэром)
  • Инструмент CLI не может аутентифицироваться на сервере (например, из-за того, что файл cookie Erlang инструмента CLI не соответствует файлу сервера)
  • Целевой узел не запущен

В дополнение к диагностической информации ниже:

  • См. Руководства по интерфейсу командной строки, кластеризации и сети на странице http://rabbitmq.com/documentation.html, чтобы узнать более
  • Просмотрите журналы сервера на узле rabbitmq @ rabbitmq

ДИАГНОСТИКА

пытался связаться с: [rabbitmq @ rabbitmq]

rabbitmq @ rabbitmq: * подключен к epmd (порт 4369) на rabbitmq * epmd сообщает: узел 'rabbitmq' не работает на всех других узлах на rabbitmq: [rabbit] * предложение: запустить узел

Сведения о текущем узле: * имя узла: rabbitmqcli52 @ e3ea1e73df02 * эффективный домашний каталог пользователя: / var / lib / rabbitmq * хэш файла cookie Erlang: AB9AFN3zvcyAWBl6ZVVOJw ==


person lanoxx    schedule 09.02.2018    source источник
comment
Какую диагностическую информацию он распечатывает? Вы пробовали rabbit@rabbitmq? rabbitmq Имя вашего контейнера, а также имя изображения?   -  person vmonteco    schedule 09.02.2018
comment
@vmonteco Я обновил свой вопрос.   -  person lanoxx    schedule 09.02.2018
comment
Вы пробовали docker exec -ti rabbitmq rabbitmqctl status? Если нет, попробуйте опубликовать результат.   -  person vmonteco    schedule 09.02.2018
comment
@vmonteco Да, это работает.   -  person lanoxx    schedule 09.02.2018


Ответы (3)


Ваш второй контейнер должен знать о первом:

docker run --link rabbitmq ...

Теперь хост будет доступен изнутри контейнера:

$ grep rabbitmq /etc/hosts
172.17.0.2  rabbitmq 01ad3098b423

$ ping rabbitmq
PING rabbitmq (172.17.0.2): 56 data bytes
64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.073 ms

Имейте в виду, что связывание контейнеров устарело в пользу пользовательские сети.

person emix    schedule 09.02.2018

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

Я предполагаю, что вы используете контейнер управления rabbitmq, и я назову его (имя хоста) rab1. Я дам имя ubuntu1 другому контейнеру, из которого вы хотите получить доступ к rab1. Поэтому сначала запустите rab1 и добавьте ubuntu1 в файл hosts:

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

И после этого запустите ubuntu1con с именем хоста ubuntu1

docker run -d --net mynet1 --ip 172.18.0.12 --hostname ubuntu1 --add-host rab1:172.18.0.11 --name ubuntu1con ubuntu

Теперь, когда вы входите в ubuntu1con, вы можете получить доступ к rab1 по имени или IP-адресу.

person cantSleepNow    schedule 11.02.2018

Предполагая, что два контейнера правильно связаны / подключены к сети, могут пинговать друг друга, а клиент Rabbitmq rabbitmqctl установлен во втором контейнере, должно работать следующее:

docker exec -it <second container's name or ID> rabbitmqctl -n rabbit@rabbitmq status 

Передайте --hostname rabbitmq в docker run при запуске контейнера rabbitmq и убедитесь, что hostname -s внутри контейнера rabbitmq печатает rabbitmq.

Если ошибка не исчезла, добавьте <IP address of rabbitmq container> rabbitmq в /etc/hosts второго контейнера и повторите попытку.

https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks содержит информацию о том, как объединить два контейнера в сеть, чтобы они могли пинговать друг друга в одной сети.

person Vikram Hosakote    schedule 11.02.2018