如何在 RabbitMQ 未运行时添加 RabbitMQ 用户

How to add a RabbitMQ user while RabbitMQ is not live

我 运行 在我的服务器的 Docker 容器中有一个 RabbitMQ 服务和 Celery。 Worker 是通过 RabbitMQ 连接到服务器的 celery 实例。

我这样设置 运行 RabbitMQ:

sudo service rabbitmq-server start
rabbitmqctl add_user bunny password
rabbitmqctl add_vhost bunny_host
rabbitmqctl set_permissions -p bunny_host bunny ".*" ".*" ".*"

这有一个问题:如果工作人员试图在正在启动的服务和正在创建的 bunny 用户之间建立连接并授予权限,那么工作人员的 celery 实例将终止。

我尝试将此添加到我的服务器的 Docker 文件中,以便在 "live" 启动之前添加用户:

RUN sudo service rabbitmq-server start && \
    rabbitmqctl add_user bunny password && \
    rabbitmqctl add_vhost bunny_host && \
    rabbitmqctl set_permissions -p bunny_host bunny ".*" ".*" ".*" && \
    sudo service rabbitmq-server stop

但是当我重启容器内的rabbitmq-server服务时,用户bunny并不存在

(如果我在服务未 运行ning 时尝试使用 rabbitmqctl 添加用户,则会出错。)

如有任何帮助,我们将不胜感激。

在构建期间你不能运行 rabbitmqctl。相反,您可以通过使用 bootstrap 文件来实现相同的目的。您需要像下面的代码片段一样更新您的文件

Docker 文件

FROM rabbitmq:3.6.11-management-alpine
ADD rabbitmq.config /etc/rabbitmq/
ADD definitions.json /etc/rabbitmq/
RUN chmod 666 /etc/rabbitmq/*

rabbitmq.config

[
  {
    rabbit,
  [
    { loopback_users, [] }
  ]
},
  {
    rabbitmq_management,
  [
    { load_definitions, "/etc/rabbitmq/definitions.json" }
  ]
}
].

definitions.json

{
  "rabbit_version": "3.6.14",
  "users": [
    {
      "name": "user",
      "password_hash": "0xZBvBD2JOGWrVO84nZ62EJuQIRehcILEiPVFB9mD4zhFcAo",
      "hashing_algorithm": "rabbit_password_hashing_sha256",
      "tags": "administrator"
    }
  ],
  "vhosts": [
    {
      "name": "/"
    }
  ],
  "permissions": [
    {
      "user": "community",
      "vhost": "/",
      "configure": ".*",
      "write": ".*",
      "read": ".*"
    }
  ],
  "parameters": [],
  "global_parameters": [
    {
      "name": "cluster_name",
      "value": "rabbit@rabbitmq"
    }
  ],
  "policies": [],
  "queues": [],
  "exchanges": [],
  "bindings": []
}