如何在 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": []
}
我 运行 在我的服务器的 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": []
}