RabbitMQ dans Docker Los Data après avoir supprimé le conteneur sans volume
Mon Dockerfile:
FROM rabbitmq:3-management
ENV RABBITMQ_HIPE_COMPILE 1
ENV RABBITMQ_ERLANG_COOKIE "123456"
ENV RABBITMQ_DEFAULT_VHOST "123456"
Mon script d'exécution:
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
Après avoir retiré le conteneur, toutes les données sont perdues.
Comment configurer rabbitmq dans docker avec des données persistantes?
Rabbitmq utilise le nom d'hôte dans le nom du dossier dans le répertoire mnesia. Ajoutez peut-être un
--hostname some-rabbit
à votre run de docker?
J'ai eu le même problème et j'ai trouvé la réponse ici
N'a pas fait trop beaucoup creuser à ce sujet, mais il semble que la façon la plus simple de le faire est de changer le hostname
comme Pedro mentionne ci-dessus.
RABBITMQ_NODENAME
Si vous souhaitez modifier le RABBITMQ_NODENAME
variable via Docker, il semble que vous devez également ajouter un hostname
puisque les noms d'hôte Docker sont générés sous forme de hachages aléatoires.
Si vous modifiez le RABBITMQ_NODENAME
var à quelque chose de statique comme my-rabbit
, RabbitMQ lancera quelque chose comme un "nxdomain not found"
erreur car il recherche quelque chose commemy-rabbit@<docker_hostname_hash>
. Si vous connaissez le nom d'hôte Docker et pouvez automatiser son extraction dans votre RABBITMQ_NODENAME
valeur comme ça, my-rabbit@<docker_hostname_hash>
Je crois que cela fonctionnerait.
MISE À JOUR
J'ai déjà dit,
Si vous connaissez le nom d'hôte Docker et pouvez automatiser son extraction dans votre
RABBITMQ_NODENAME
valeur comme ça,my-rabbit@<docker_hostname_hash>
Je crois que cela fonctionnerait.
Cela ne fonctionnerait pas comme décrit précisément car le nom d'hôte du docker par défaut est généré de manière aléatoire au lancement, s'il n'est pas attribué explicitement. L'obstacle serait en fait de vous assurer que vous utilisez EXACT SAME <docker_hostname_hash>
comme votre exécution d'origine afin que le répertoire de données soit récupéré correctement. Ce serait pénible à mettre en œuvre de manière dynamique/robuste. Il serait plus simple d'utiliser un nom d'hôte explicite comme décrit ci-dessous.
L'alternative serait de définir hostname
sur une valeur que vous choisissez - disons, app-messaging
- ET AUSSI définissez le RABBITMQ_NODENAME
var à quelque chose comme rabbit@app-messaging
. De cette façon, vous contrôlez le nom de nœud complet qui sera utilisé dans le répertoire de données.
( Recommandé )
Cela dit, sauf si vous avez une raison PAS pour changer le nom d'hôte, changer le nom d'hôte seul est le moyen le plus simple de vous assurer que vos données seront montées vers et depuis le même point à chaque fois.
J'utilise le fichier Docker Compose suivant pour conserver avec succès ma configuration entre les lancements.
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
Cela crée un répertoire data
à côté de mon fichier de composition et persiste la configuration de RabbitMQ comme suit:
./data/
rabbit@mabbit/
rabbit@mabbit-plugins-expand/
[email protected]
rabbit@mabbit-feature_flags