rabbitmq 如何在 docker 下做数据持久化?

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"
阅读 5.5k
2 个回答

搞了一下午,博客看了几十篇,终于还是你这方法解决了,特意注册个账号来感谢你

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏