首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头上保留RabbitMQ用户帐户

如何在码头上保留RabbitMQ用户帐户
EN

Stack Overflow用户
提问于 2020-04-10 09:47:28
回答 2查看 844关注 0票数 1

我在坚持通过管理面板设置的RabbitMQ用户帐户时遇到了问题。一旦重新启动,它们就会消失,我相信这与每次重新启动时创建的新的mnesia数据库有关。

我尝试将一个坞卷绑定到/var/lib/rabbitmq

代码语言:javascript
复制
version: '3.1'

services:

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

volumes:
  rabbitdata1:
    driver: local

当我查看挂载目录的内容时,我得到:

代码语言:javascript
复制
$ 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创建了一个新实例,并且丢失了所有更改:

代码语言:javascript
复制
$ 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@0eceaaa217c8rabbit@ac5afbef3c81不同,我得到了一个用于.pid和mnesia目录的常量字符串,但是RabbitMQ甚至不会重新启动:

代码语言:javascript
复制
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停靠服务重新启动之间的更改吗?

也许还有其他目录可以起作用?

我检查了其他可能的候选目录,但只找到了/etc/rabbitmq//opt/rabbitmq/,它们分别看起来像是配置目录和安装目录:

代码语言:javascript
复制
bash-5.0# find . -name 'rabbitmq'
./etc/rabbitmq
./var/log/rabbitmq
./var/lib/rabbitmq
./opt/rabbitmq
./opt/rabbitmq/etc/rabbitmq
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-10 10:21:27

码头枢纽形象的文档中,它注意到(在“运行守护进程”下):

关于RabbitMQ,需要注意的一件重要事情是,它根据它所称的“节点名”存储数据,该名称默认为主机名。这意味着在Docker中使用的是,我们应该为每个守护进程显式地指定-h/--hostname,这样我们就不会得到随机的主机名,并且可以跟踪我们的数据。

等效的Docker组合设置是hostname:。它默认为容器ID,每次重新创建容器时都会更改,这就是为什么您没有看到数据持久化,以及文件名的名称中有12位数的ID。

代码语言:javascript
复制
services:
  rabbitmq:
    image: rabbitmq:management-alpine
    hostname: rabbitmq                 # <-----
    volumes:
      - rabbitdata1:/var/lib/rabbitmq/
    ports:
      - "5672:5672"
      - "15672:15672"

( hostname:设置的唯一东西是容器认为自己的主机名是什么。它与网络设置完全没有连接。设置它通常是不必要的,除非您有这样的软件专门研究它。)

票数 1
EN

Stack Overflow用户

发布于 2021-10-19 18:53:24

创建两个文件夹、数据等

enabled_plugins

代码语言:javascript
复制
[rabbitmq_management,rabbitmq_prometheus].

rabbitmq.conf

代码语言:javascript
复制
    auth_mechanisms.1 = PLAIN
    auth_mechanisms.2 = AMQPLAIN
    loopback_users.guest = false
    listeners.tcp.default = 5672
    #default_pass = admin
    #default_user = admin
    hipe_compile = false
    #management.listener.port = 15672
    #management.listener.ssl = false
    management.tcp.port = 15672
    management.load_definitions = /etc/rabbitmq/definitions.json

definitions.json

代码语言:javascript
复制
       {
        "users": [
            {
            "name": "admin",
            "password": "admin",
            "tags": "administrator"
            }
        ],
        "vhosts": [
            {
            "name": "/"
            }
        ],
        "policies": [
            {
            "vhost": "/",
            "name": "ha",
            "pattern": "",
            "apply-to": "all",
            "definition": {
                "ha-mode": "all",
                "ha-sync-batch-size": 256,
                "ha-sync-mode": "automatic"
            },
            "priority": 0
            }
        ],
        "permissions": [
            {
            "user": "admin",
            "vhost": "/",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
            }
        ],
        "queues": [
            {
            "name": "job-import.triggered.queue",
            "vhost": "/",
            "durable": true,
            "auto_delete": false,
            "arguments": {}
            }
        ],
        "exchanges": [
            {
            "name": "lob-proj-dx",
            "vhost": "/",
            "type": "direct",
            "durable": true,
            "auto_delete": false,
            "internal": false,
            "arguments": {}
            }
        ],
        "bindings": [
            {
            "source": "lob-proj-dx",
            "vhost": "/",
            "destination": "job-import.triggered.queue",
            "destination_type": "queue",
            "routing_key": "job-import.event.triggered",
            "arguments": {}
            }
        ]
    }

经营码头

代码语言:javascript
复制
docker run --restart=always -d -p 5672:5672 -p 15672:15672 --mount type=bind,source=E:\docker\rabbit\data,target=/var/lib/rabbitmq/ --mount type=bind,source=E:\docker\rabbit\etc,target=/etc/rabbitmq/ --name rabbitmq --hostname my-rabbit rabbitmq:3.7.28-management

在重新启动的过程中,事情会一直持续下去。

取自这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61137733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档