使用 Docker 部署 RabbitMQ 并实现数据持久化

server/2025/3/13 20:18:19/

非常好!以下是一份完整的 Docker 部署 RabbitMQ 的博客文档,包含从安装到问题排查的详细步骤。你可以直接将其发布到博客中。


使用 Docker 部署 RabbitMQ 并实现数据持久化

RabbitMQ 是一个开源的消息队列系统,广泛应用于分布式系统中。使用 Docker 部署 RabbitMQ 可以快速搭建开发或生产环境,同时通过挂载卷实现数据持久化。本文将详细介绍如何使用 Docker 部署 RabbitMQ,并解决常见问题。


目录

  1. 环境准备
  2. 部署 RabbitMQ
    • 使用 Docker 命令部署
    • 使用 Docker Compose 部署
  3. 创建管理员用户
  4. 验证部署
  5. 数据持久化
  6. 常见问题排查
  7. 总结

环境准备

1. 安装 Docker

确保已安装 Docker。如果未安装,请参考 Docker 官方文档 进行安装。

2. 安装 Docker Compose

确保已安装 Docker Compose。如果未安装,请参考 Docker Compose 官方文档 进行安装。

3. 创建数据目录

在宿主机上创建目录,用于存储 RabbitMQ 的数据和日志:

mkdir -p /home/middleware/rabbitmq/data
mkdir -p /home/middleware/rabbitmq/logs

部署 RabbitMQ

使用 Docker 命令部署

运行以下命令启动 RabbitMQ 容器:

docker run -d \--hostname rabbitmq-node1 \  # 设置 RabbitMQ 节点的主机名--name rabbitmq \            # 容器名称-p 5672:5672 \              # RabbitMQ 的 AMQP 端口-p 15672:15672 \            # RabbitMQ 管理界面端口-v /home/middleware/rabbitmq/data:/var/lib/rabbitmq \  # 挂载数据目录-v /home/middleware/rabbitmq/logs:/var/log/rabbitmq \  # 挂载日志目录rabbitmq:management         # 使用带管理插件的 RabbitMQ 镜像

使用 Docker Compose 部署

创建 docker-compose.yml 文件:

version: '3'
services:rabbitmq:image: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitmq-node1ports:- "5672:5672"- "15672:15672"volumes:- /home/middleware/rabbitmq/data:/var/lib/rabbitmq- /home/middleware/rabbitmq/logs:/var/log/rabbitmqenvironment:- RABBITMQ_DEFAULT_USER=admin- RABBITMQ_DEFAULT_PASS=admin123restart: always

运行以下命令启动服务:

docker-compose up -d

创建管理员用户

默认的 guest 用户只能在本地访问。为了安全性和更好的管理,建议创建一个新的管理员用户。

1. 进入 RabbitMQ 容器

docker exec -it rabbitmq bash

2. 创建用户

创建一个用户名为 admin,密码为 admin123 的用户:

rabbitmqctl add_user admin admin123

3. 设置用户标签

为用户分配 administrator 标签,使其具有管理员权限:

rabbitmqctl set_user_tags admin administrator

4. 设置用户权限

为用户设置权限,允许其访问所有虚拟主机(vhost)和资源:

rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

5. 删除默认的 guest 用户(可选)

为了安全性,建议删除默认的 guest 用户:

rabbitmqctl delete_user guest

验证部署

  1. 访问 RabbitMQ 管理界面

    • 打开浏览器,访问 http://<服务器IP>:15672
    • 使用新创建的管理员用户(如 admin)登录。
  2. 检查挂载的目录

    • 查看 /home/middleware/rabbitmq/data,确认消息数据已保存。
    • 查看 /home/middleware/rabbitmq/logs,确认日志文件已保存。
  3. 测试数据持久化

    • 在 RabbitMQ 管理界面中创建队列或发送消息。
    • 停止并删除容器:
      docker stop rabbitmq
      docker rm rabbitmq
      
    • 重新启动容器,检查队列和消息是否仍然存在。

数据持久化

通过挂载宿主机目录到容器中,可以实现 RabbitMQ 数据的持久化:

  • 数据目录/home/middleware/rabbitmq/data 挂载到 /var/lib/rabbitmq,用于存储消息数据。
  • 日志目录/home/middleware/rabbitmq/logs 挂载到 /var/log/rabbitmq,用于存储日志文件。

常见问题排查

1. 无法访问管理界面

  • 检查容器是否运行
    docker ps
    
  • 检查端口映射
    docker port rabbitmq
    
  • 检查防火墙和安全组
    • 确保服务器的防火墙开放了 15672 端口。
    • 如果是云服务器,检查安全组规则。

2. 数据未持久化

  • 检查挂载目录权限
    sudo chmod -R 775 /home/middleware/rabbitmq/data
    sudo chown -R 999:999 /home/middleware/rabbitmq/data
    

3. RabbitMQ 管理插件未启用

4. .erlang.cookie 文件权限问题

如果 RabbitMQ 启动失败并提示 .erlang.cookie 文件权限问题,运行以下命令修复:

sudo chmod 600 /home/middleware/rabbitmq/data/.erlang.cookie
sudo chown 999:999 /home/middleware/rabbitmq/data/.erlang.cookie

dockercompose__200">5. docker-compose 权限问题

如果运行 docker-compose up -d 时提示权限不足,运行以下命令修复:

sudo chmod +x /usr/local/bin/docker-compose

总结

通过 Docker 部署 RabbitMQ 可以快速搭建消息队列服务,同时通过挂载卷实现数据持久化。本文详细介绍了部署步骤、数据持久化方法以及常见问题的排查方法。希望这篇文档能帮助你顺利部署 RabbitMQ!


http://www.ppmy.cn/server/174708.html

相关文章

go语言中立即调用的匿名函数

先看代码 type CachedProductQuery struct {productQuery ProductQuerycacheClient *redis.Clientprefix string }func (c CachedProductQuery) GetById(productId int) (product Product, err error) {cachedKey : fmt.Sprintf("%s_%s_%d", c.prefix, "…

集合知识点

1.Collection接口 1.1List接口 1.1.1 ArrayList 常用方法 Collection List ArrayList 常用方法&#xff1a; add(E e) 添加元素 添加在末尾 add(int index,E e) 在指定位置添加元素 clear() 从列表中删除所有元素。 contains(Object o) 如果此列表包含指定的元素&#xff0…

【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装

标题详情作者简介愚公搬代码头衔华为云特约编辑&#xff0c;华为云云享专家&#xff0c;华为开发者专家&#xff0c;华为产品云测专家&#xff0c;CSDN博客专家&#xff0c;CSDN商业化专家&#xff0c;阿里云专家博主&#xff0c;阿里云签约作者&#xff0c;腾讯云优秀博主&…

Docker搭建Redis哨兵模式【一主两从三哨兵】

Docker搭建Redis哨兵模式 系统: CentOS 7 Dockder 版本: VMware虚拟机 网络适配器 网络连接 桥接模式:直接连接物理网络查看IP命令 ip addr一、哨兵模式概述 1. 官方文档与关联博客 官方文档:https://redis.io/docs/latest/operate/oss_and_stack/management/sentinel关联博…

【透视国家的三维棱镜:技术、制度与文化的解构与重构】

透视国家的三维棱镜&#xff1a;技术、制度与文化的解构与重构 一、技术层&#xff1a;文明的物质显影剂 技术作为生存密码 青铜器冶炼技术将部落联盟升级为商周王朝&#xff0c;蒸汽机将农耕文明扭转为工业文明&#xff0c;半导体技术正在重塑21世纪权力版图。技术是文明存续的…

高阶哈希算法

SHA-256简介 SHA-256 是 **SHA-2&#xff08;Secure Hash Algorithm 2&#xff09;**家族中的一种哈希算法&#xff0c;由美国国家安全局设计&#xff0c;并于 2001 年发布。它能够将任意长度的数据映射为一个固定长度256 位&#xff0c;即 32 字节的哈希值&#xff0c;通常以…

数据库---sqlite3

数据库&#xff1a; 数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库: 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer …

第八课:Scrapy框架入门:工业级爬虫开发

在当今大数据时代&#xff0c;数据抓取已成为信息获取的重要手段。Scrapy作为一个基于Python的开源网络爬虫框架&#xff0c;凭借其高效、灵活的特性&#xff0c;在工业级爬虫开发中占据重要地位。本文将详细介绍Scrapy框架的基本架构、工作流程、关键组件&#xff08;如Spider…