docker-compose 中添加了 volumes 做数据持久化,但是依然重新 run 的 rabbitmq 的数据依然没有被持久化怎么办?
在 docker 中跑一个 rabbitmq
看了网上的教程,都说把 /var/lib/rabbitmq
映射出来就好了
docker-compose.yaml 文件:
version: "3"
services:
rabbitmq3-management:
container_name: rabbitmq3-management
image: rabbitmq:3-management
logging:
driver: json-file
options:
max-size: "100m"
max-file: "1"
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
volumes:
- "/home/bot/opt/docker-compose-public/rabbit/volumes:/var/lib/rabbitmq"
ports:
- "5672:5672"
- "15672:15672"
为了验证持久化配置是否生效,我去建了一个 vhost
但是我发现,这样的持久化配置,当我执行 docker-compose restart
之前建立的 vhost 是还在的
但是当我执行 docker-compose down
然后 docker-compose up
却不行,这个时候,vhost 没掉了。
为什么?我还需要映射哪个目录?
已解决:
要添加 hostname: rabbitmq3-management-master
, 这个 rabbitmq3-management-master 可以换成任意你想要的,关键是要有固定的 hostname
如果我们跑 container 的时候,不指定 hostname,就会生成随机 hostname ,每次 run 都是不一样的 hostname,而 rabbitmq 的持久化是基于 hostname 的。至于为什么这么设计,因为一台电脑可以跑多个 rabbitmq 实例呀
version: "3"
services:
rabbitmq3-management:
container_name: rabbitmq3-management
image: rabbitmq:3-management
hostname: rabbitmq3-management-master
logging:
driver: json-file
options:
max-size: "100m"
max-file: "1"
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=guest
volumes:
- "/home/bot/opt/docker-compose-public/rabbit/volumes:/var/lib/rabbitmq"
ports:
- "5672:5672"
- "15672:15672"
https://github.com/docker-lib...
要固定一个 hostname