Ответ 1
Rabbitmq использует имя хоста как часть имени папки в mnesia каталог. Может быть, добавить
--hostname some-rabbit
в свой докер?
У меня была та же проблема, и я нашел ответ здесь
RabbitMQ в данных docker los после удаления контейнера без объема
Мой Dockerfile:
FROM rabbitmq:3-management
ENV RABBITMQ_HIPE_COMPILE 1
ENV RABBITMQ_ERLANG_COOKIE "123456"
ENV RABBITMQ_DEFAULT_VHOST "123456"
Мой сценарий запуска:
IMAGE_NAME="service-rabbitmq"
TAG="${REGISTRY_ADDRESS}/${IMAGE_NAME}:${VERSION}"
echo $TAG
docker rm -f $IMAGE_NAME
docker run \
-itd \
-v "rabbitmq_log:/var/log/rabbitmq" \
-v "rabbitmq_data:/var/lib/rabbitmq" \
--name "service-rabbitmq" \
--dns=8.8.8.8 \
-p 8080:15672 \
$TAG
После удаления контейнера все данные потеряны.
Как настроить rabbitmq в докере с постоянными данными?
Rabbitmq использует имя хоста как часть имени папки в mnesia каталог. Может быть, добавить
--hostname some-rabbit
в свой докер?
У меня была та же проблема, и я нашел ответ здесь
Не слишком много копался в этом, но кажется, что самый простой способ сделать это - изменить hostname
, как упоминал Педро выше.
RABBITMQ_NODENAME
Если вы хотите отредактировать переменную RABBITMQ_NODENAME
через Docker, похоже, вам также нужно добавить hostname
, поскольку имена хостов Docker генерируются в виде случайных хэшей.
Если вы измените переменную RABBITMQ_NODENAME
на статическую, например, my-rabbit
, RabbitMQ выдаст что-то вроде ошибки "nxdomain not found"
, потому что он ищет что-то вроде[email protected]<docker_hostname_hash>
. Если вы знаете имя хоста Docker и можете автоматически ввести его в значение RABBITMQ_NODENAME
, то [email protected]<docker_hostname_hash>
, я думаю, это сработает.
UPDATE
Я ранее сказал,
Если вы знаете имя хоста Docker и можете автоматически ввести его в значение
RABBITMQ_NODENAME
, то[email protected]<docker_hostname_hash>
, я думаю, это сработает.
Это не будет работать так, как описано, потому что имя хоста докера по умолчанию генерируется случайным образом при запуске, если оно не назначено явно. На самом деле препятствием было бы убедиться, что вы используете ТОЧНОЕ ЖЕ <docker_hostname_hash>
в качестве исходного запуска, чтобы каталог данных был выбран правильно. Это было бы трудно реализовать динамически/надежно. Было бы проще использовать явное имя хоста, как описано ниже.
Альтернативой может быть установка для hostname
значения, которое вы выберете - скажем, app-messaging
- И ТАКЖЕ установите для переменной RABBITMQ_NODENAME
что-то вроде [email protected]
. Таким образом, вы контролируете полное имя узла, которое будет использоваться в каталоге данных.
(Рекомендуется)
Тем не менее, если у вас нет причины НЕ изменить имя хоста, изменение только имени хоста - это самый простой способ гарантировать, что ваши данные будут монтироваться в одну и ту же точку каждый раз.
Я использую следующий файл Docker Compose для успешного сохранения настроек между запусками.
version: '3'
services:
rabbitmq:
hostname: 'mabbit'
image: "${ARTIFACTORY}/rabbitmq:3-management"
ports:
- "15672:15672"
- "5672:5672"
volumes:
- "./data:/var/lib/rabbitmq/mnesia/"
networks:
- rabbitmq
networks:
rabbitmq:
driver: bridge
Это создает каталог data
рядом с моим файлом compose и сохраняет настройку RabbitMQ следующим образом:
./data/
[email protected]/
[email protected]/
[email protected]
[email protected]_flags