我尝试在Docker容器内启动RMQ,使用预先创建的队列qwer
。
在此之前,我使用的是简单的docker-compose.yml
文件:
rabbit:
image: rabbitmq:management-alpine
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
它运行得很好,除了它没有在开始时预先创建队列。现在我已经切换到自定义图像,使用以下Dockerfile
:
FROM rabbitmq:management-alpine
ADD rabbitmq.conf /etc/rabbitmq/
ADD definitions.json /etc/rabbitmq/
RUN chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf /etc/rabbitmq/definitions.json
其中,rabbitmq.conf
是v3.7+ sysctl样式的配置,其中包含行:
management.load_definitions = /etc/rabbitmq/definitions.json
和definitions.json
包含创建队列尝试:
{
"vhosts":[
{"name":"/"}
],
"queues":[
{"name":"qwer","vhost":"/","durable":true,"auto_delete":false,"arguments":{}}
]
}
现在它开始拒绝登录:
Error on AMQP connection <0.660.0> (172.18.0.6:48916 -> 172.18.0.10:5672, state: starting):
PLAIN login refused: user 'guest' - invalid credentials
我认为这个任务有些简单,但是兔子本身的配置过程是最复杂的任务,文档有些不清楚。
我无法弄清楚它应该如何工作,即使经过4天的试验和谷歌搜索。
你能帮助我,如何写配置文件,以创建一个队列,并保留连接和交谈的能力?
3条答案
按热度按时间9lowa7mx1#
其实你就快到了。
RabbitMQ有一个规则,即“guest”用户只能从localhost连接。由于您是在一个docker上运行它,我假设您试图通过暴露端口“15672”从外部访问它,方法是:
docker run <rabbitmq-docker-img> -p 15672:15672
因此,要解决此问题,您必须创建一个具有管理员权限的用户。
首先,更改以下内容:
您可以使用ath,I used user/password作为您的用户名/密码。
在您的Dockerfile中,您可以添加:
EXPOSE 15672
如果您不想在每次运行时都暴露。最后,对definitions.json文件进行如下修改:
告诉我进展如何!
看看这个link
使用此停靠文件:
并使用此init.sh:
ee7vknir2#
你可以预定义队列和交换,而不需要创建自己的rabbit-mq docker映像。
您的Docker-compose应该如下所示:
在这种情况下,rabbitmq.conf和definitions.json文件应该位于与docker-compose文件相同的父文件夹中的init文件夹中
rabbitmq.conf文件
定义. json文件
注意:在Rabbit映像中更新后,可能需要额外的配置。如果Rabbit容器无法使用上述配置启动(错误消息包含“vhost”),则应将以下配置添加到定义文件中:
使用此附加配置,默认用户将是guest,密码为guest。
除了队列、交换和绑定之外,definitions.json文件还可以包含其他配置
lf5gs5x23#
我发现使用
init.sh
并在definitions.json
文件中提交未加密的密码的公认答案不足以满足我的需要,于是提出了以下解决方案:从一个普通的RabbitMQ开始,通过Web UI配置其队列和用户,导出配置,然后将其复制到一个新的Docker映像中(或者,如果您愿意,您可以将其作为卷挂载到您选择的基础RabbitMQ映像中):
1.启动一个运行
rabbitmq:3.9-management
映像的容器,并将管理接口端口发布到localhost:1.在浏览器中访问http://localhost:8080,并使用用户名登录:客人,密码:客。
1.在RabbitMQ Web UI的 Queues 选项卡下配置和创建队列。同时创建您可能需要的任何其他用户。
1.导出 Overview 选项卡下的定义。将文件命名为
definitions.json
,并将其放置在空目录conf
中:1.创建一个文件
rabbitmq.conf
,其中包含一行:并将其放在
conf
目录中:1.定义一个新的Docker映像,并将RabbitMQ定义复制到其中:
和一个
docker-compose.yml
文件来构建映像并运行容器:目录结构:
1.启动容器:
并访问Web UI以确保已加载定义并创建队列。
如果您不想通过UI配置RabbitMQ,
definitions.json
文件是非常不言自明的,因此应该直接编辑它,以便添加新队列、创建新用户等,尽管您需要see the answer to this question来了解如何创建sha256哈希。