Как сохранить учетные записи RabbitMQ в Docker - PullRequest
1 голос
/ 10 апреля 2020

У меня возникают проблемы с сохранением учетных записей пользователей RabbitMQ, настроенных через панель управления. После перезапуска они исчезают, и я считаю, что это связано с созданием новых баз данных mnesia при каждом перезапуске.

Я попытался связать том docker с /var/lib/rabbitmq:

version: '3.1'

services:

  rabbitmq:
    image: rabbitmq:management-alpine
    volumes:
      - rabbitdata1:/var/lib/rabbitmq/
    ports:
      - "5672:5672"
      - "15672:15672"

volumes:
  rabbitdata1:
    driver: local

Когда я смотрю на содержимое смонтированного каталога, я получаю:

$ docker exec -ti local_rabbitmq_1 /bin/bash
bash-5.0# ls /var/lib/rabbitmq/mnesia/
rabbit@0eceaaa217c8                 rabbit@0eceaaa217c8-plugins-expand
rabbit@0eceaaa217c8-feature_flags   rabbit@0eceaaa217c8.pid

Но при перезапуске службы создается впечатление, что создается новый экземпляр для нового PID, и все изменения lost:

$ docker exec -ti local_rabbitmq_1 /bin/bash
bash-5.0# ls /var/lib/rabbitmq/mnesia/
rabbit@0eceaaa217c8                 rabbit@ac5afbef3c81
rabbit@0eceaaa217c8-feature_flags   rabbit@ac5afbef3c81-feature_flags
rabbit@0eceaaa217c8-plugins-expand  rabbit@ac5afbef3c81-plugins-expand
rabbit@0eceaaa217c8.pid             rabbit@ac5afbef3c81.pid

Я также попытался установить переменную окружения RABBITMQ_NODENAME, чтобы вместо вышеприведенных rabbit@0eceaaa217c8 и rabbit@ac5afbef3c81 я получил постоянную строку для .pid и mnesia каталоги, но тогда RabbitMQ даже не перезапустится:

2020-04-10 10:41:34.657 [info] <0.309.0> Running boot step database defined by app rabbit
2020-04-10 10:41:34.685 [error] <0.308.0> CRASH REPORT Process <0.308.0> with 0 neighbours exited with reason: {{failed_to_cluster_with,[foo@190e6343c238],"Mnesia could not connect to any nodes."},{rabbit,start,[normal,[]]}} in application_master:init/4 line 138
2020-04-10 10:41:34.686 [info] <0.44.0> Application rabbit exited with reason: {{failed_to_cluster_with,[foo@190e6343c238],"Mnesia could not connect to any nodes."},{rabbit,start,[normal,[]]}}
{"Kernel pid terminated",application_controller,"{application_start_failure,rabbit,{{failed_to_cluster_with,[foo@190e6343c238],\"Mnesia could not connect to any nodes.\"},{rabbit,start,[normal,[]]}}}"}
Kernel pid terminated (application_controller) ({application_start_failure,rabbit,{{failed_to_cluster_with,[foo@190e6343c238],"Mnesia could not connect to any nodes."},{rabbit,start,[normal,[]]}}})

Есть ли другой способ сохранить изменения между перезапусками сервиса RabbitMQ docker?

Может быть, есть какой-нибудь другой каталог, который мог бы справиться?

Я проверил наличие других потенциальных кандидатов, но нашел только /etc/rabbitmq/ и /opt/rabbitmq/, которые выглядят как каталоги конфигурации и установки соответственно:

bash-5.0# find . -name 'rabbitmq'
./etc/rabbitmq
./var/log/rabbitmq
./var/lib/rabbitmq
./opt/rabbitmq
./opt/rabbitmq/etc/rabbitmq

1 Ответ

1 голос
/ 10 апреля 2020

В документации к rabbitmq Docker образу концентратора он отмечает (в разделе «Запуск демона»):

Одна из важных вещей, о которых следует помнить RabbitMQ заключается в том, что он хранит данные на основе того, что он называет «именем узла», по умолчанию используется имя хоста. Для использования в Docker это означает, что мы должны явно указывать -h / --hostname для каждого демона, чтобы мы не получали случайное имя хоста и могли отслеживать наши данные.

Эквивалентная Docker Compose настройка hostname:. По умолчанию используется идентификатор контейнера, который изменяется каждый раз при повторном создании контейнера, поэтому вы не видите, что данные сохраняются и почему в именах файлов содержатся 12-шестнадцатеричные git идентификаторы.

services:
  rabbitmq:
    image: rabbitmq:management-alpine
    hostname: rabbitmq                 # <-----
    volumes:
      - rabbitdata1:/var/lib/rabbitmq/
    ports:
      - "5672:5672"
      - "15672:15672"

(Единственное, что устанавливает hostname:, - это то, что контейнер считает своим именем хоста. Он вообще не связан с настройкой сети. Установка обычно не требуется, если у вас нет такого программного обеспечения, которое специально выглядит на это.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...