Docker 启动时 预配置 RabbitMQ (建立用户 / Vhost / Queue)
在 Docker 环境中运行 RabbitMQ 时,许多场合希望预定义一些用户/vhost/queue。官方的教程都是通过 GUI 或者命令行来实现,民间也有通过自定义 RabbitMQ 镜像的方法,但操作性都比较繁杂。本文提供一种更简便的方法。
实现的大致流程
- 制作 RabbitMQ CONFIG 文件,指定初始化定义 definitions.json 文件
- 制作 definitions.json,来定义需要初始化的对象
- 运行 Docker,载入以上两个文件
制作 RabbitMQ CONFIG 文件
该文件非常简单,只需要在官方默认的基础上添加一行内容:
# 默认
loopback_users.guest = false
# 新增以下
management.load_definitions = /var/lib/rabbitmq/definitions.json
制作 definitions.json
如果你已有一个配置好的 RabbitMQ,该文件可以通过命令行/WEB API 导出。
rabbitmqadmin --host rabbitmq-example-server --username admin --password pass export custom_definitions.json
也可以手写一个,此处提供一个示例,建立一个名为 support 用户,一个 vhost 以及一个queue:
{
"rabbit_version": "3.11.9",
"rabbitmq_version": "3.11.9",
"product_name": "RabbitMQ",
"product_version": "3.11.9",
"users": [
{
"name": "support",
"password_hash": "**********************************************",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": [
"administrator"
],
"limits": {
}
}
],
"vhosts": [
{
"name": "vhost"
}
],
"permissions": [
{
"user": "support",
"vhost": "vhost",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"queues": [
{
"name": "queue1",
"vhost": "vhost",
"durable": true,
"auto_delete": false,
"arguments": {
"x-queue-type": "classic"
}
}
]
}
运行
- 建立一个空目录 mq,放入
definitions.json。再建立一个子目录conf.d,放入 CONFIG 文件。 - 启动 Docker, 通过
RABBITMQ_CONFIG_FILE或RABBITMQ_CONFIG_FILES环境变量指定自定义的 CONFIG 文件/目录
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v /mq:/var/lib/rabbitmq -e RABBITMQ_CONFIG_FILES=/var/lib/rabbitmq/conf.d rabbitmq:management
/var/lib/rabbitmq是 RabbitMQ 运行时存放数据的目录,为了简化操作步骤。所以本方案直接把 CONFIG 文件和 definitions.json 也都直接放在该目录中。
本文介绍了如何在Docker启动时预配置RabbitMQ,包括创建用户、虚拟主机(Vhost)和队列。通过制作RabbitMQ的CONFIG文件指定初始化的definitions.json,并在Docker运行时加载这两个文件,简化了预配置的复杂过程。
769

被折叠的 条评论
为什么被折叠?



