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

非常好!以下是一份完整的 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 管理插件未启用

  • 进入容器并启用插件
    docker exec -it rabbitmq bash
    rabbitmq-plugins enable rabbitmq_management
    

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

5. docker-compose 权限问题

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

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/897075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot429-基于springboot的教务管理系统(源码+数据库+纯前后端分离+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…

my学习网址

文章目录 1.软件版本管控GIT学习网站大全1官方文档类2在线教程类3互动学习类4问答社区类 Linux学习网址1、 Linux命令行与shell脚本编程大全 1.软件版本管控 GIT学习网站大全 廖雪峰网站 以下为你推荐不同类型的学习Git的网站&#xff1a; 1官方文档类 Git官方文档 网址&am…

Best practice-生产环境中加锁的最佳实践

什么是死锁&#xff1f; 场景&#xff1a;图书馆有两个相邻的储物柜&#xff08;柜子A和柜子B&#xff09;&#xff0c;小明和小红需要同时使用这两个柜子才能完成借书流程。 互斥资源 每个柜子只有一把钥匙&#xff0c;且一次只能被一人使用&#xff08;资源不可共享&#x…

极狐GitLab 17.9 正式发布,40+ DevSecOps 重点功能解读【四】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

黄昏时间户外街拍人像Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 黄昏时分有着独特而迷人的光线&#xff0c;使此时拍摄的人像自带一种浪漫、朦胧的氛围 。通过 Lr 调色&#xff0c;可以进一步强化这种特质并根据不同的风格需求进行创作。Lr&#xff08;Lightroom&#xff09;作为专业的图像后期处理软件&#xff0c;提供了丰富的调色…

Spring Boot 项目中 Redis 常见问题及解决方案

目录 缓存穿透缓存雪崩缓存击穿Redis 连接池耗尽Redis 序列化问题总结 1. 缓存穿透 问题描述 缓存穿透是指查询一个不存在的数据&#xff0c;由于缓存中没有该数据&#xff0c;请求会直接打到数据库上&#xff0c;导致数据库压力过大。 解决方案 缓存空值&#xff1a;即使…

信息系统项目管理师--整合管理

信息系统项目管理师–整合管理

关于tomcat使用中浏览器打开index.jsp后中文显示不正常是乱码,但英文正常的问题

如果是jsp文件就在首行加 “<% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8" %>” 如果是html文件 在head标签加入&#xff1a; <meta charset"UTF-8"> 以jsp为例子&#xff0c;我们…

微服务的春天:基于Spring Boot的架构设计与实践

微服务的春天:基于Spring Boot的架构设计与实践 在如今的技术领域,微服务架构俨然成为了解决复杂系统开发与运维挑战的关键利器。作为一名资深运维和自媒体创作者,笔名Echo_Wish,我将深入探讨基于Spring Boot的微服务架构设计,结合实例代码说明观点,希望能为大家带来启发…

JVM参数调整

一、内存相关参数 1. 堆内存控制 -Xmx&#xff1a;最大堆内存&#xff08;如 -Xmx4g&#xff0c;默认物理内存1/4&#xff09;。-Xms&#xff1a;初始堆内存&#xff08;建议与-Xmx相等&#xff0c;避免动态扩容带来的性能波动&#xff09;。-Xmn&#xff1a;新生代大小&…

AVM 环视拼接 鱼眼相机

https://zhuanlan.zhihu.com/p/651306620 AVM 环视拼接方法介绍 从内外参推导IPM变换方程及代码实现&#xff08;生成AVM环视拼接图&#xff09;_avm拼接-CSDN博客 经典文献阅读之--Extrinsic Self-calibration of the Surround-view System: A Weakly... (环视系统的外参自…

【哇! C++】类和对象(三) - 构造函数和析构函数

目录 一、构造函数 1.1 构造函数的引入 1.2 构造函数的定义和语法 1.2.1 无参构造函数&#xff1a; 1.2.2 带参构造函数 1.3 构造函数的特性 1.4 默认构造函数 二、析构函数 2.1 析构函数的概念 2.2 特性 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中…

【五.LangChain技术与应用】【11.LangChain少样本案例模板:小数据下的AI训练】

深夜的创业孵化器里,你盯着屏幕上的医疗AI项目,手里攥着仅有的97条标注数据——这是某三甲医院心内科攒了三年的罕见病例。投资人刚刚发来最后通牒:“下周demo要是还分不清心肌炎和感冒,就撤资!” 这时你需要掌握的不是更多数据,而是让每个样本都变成会复制的孙悟空的毫毛…

2005-2019年各省城镇人口数据

2005-2019年各省城镇人口数据 1、时间&#xff1a;2005-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;地区、年份、城镇人口(万人) 4、范围&#xff1a;31省 5、指标解释&#xff1a;‌城镇人口是指居住在城市、集镇的人口&#xff0c;主要依据人群…

Anaconda 部署 DeepSeek

可以通过 Anaconda 环境部署 DeepSeek 模型&#xff0c;但需结合 PyTorch 或 TensorFlow 等深度学习框架&#xff0c;并手动配置依赖项。 一、Anaconda 部署 DeepSeek 1. 创建并激活 Conda 环境 conda create -n deepseek python3.10 # 推荐 Python 3.8-3.10 conda activate…

Python 面向对象高级编程-定制类

目录 __str__ __iter__ __getitem__ __getattr__ __call__ 小结 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意&#xff0c;这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了&#xff0c;__len__()方法我们也知道是为了能让class作用于len()…

MCP与RAG:增强大型语言模型的两种路径

引言 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;在自然语言处理任务中展现了令人印象深刻的能力。然而&#xff0c;这些模型的局限性&#xff0c;如知识过时、生成幻觉&#xff08;hallucination&#xff09;等问题&#xff0c;促使研究人员开发了多种增强技…

IDEA Generate POJOs.groovy 踩坑小计 | 生成实体 |groovy报错

一、无法生成注释或生成的注释是null 问题可能的原因&#xff1a; 1.没有从表里提取注释信息&#xff0c;修改def calcFields(table)方法即可 def calcFields(table) {DasUtil.getColumns(table).reduce([]) { fields, col ->def spec Case.LOWER.apply(col.getDataType().…

ue5.5崩溃报gpu错误快速修复注册表命令方法

网上已经有很多方法了&#xff0c;自己写了个regedit比处理dos批处理命令&#xff0c;启动时需要win 管理员身份拷贝后&#xff0c;将以下代码&#xff0c;保存为 run.bat格式批处理文件&#xff0c;右键鼠标&#xff0c;在弹出菜单中&#xff0c;选择用管理员身份运行。即可。…

能量石[算法题]

题目来源&#xff1a;第十五届蓝桥杯大赛软件赛省赛Java 大学 B 组&#xff08;算法题&#xff09; 可以参考一下&#xff0c;本人也是比较菜 不喜勿喷&#xff0c;求求求 import java.util.Scanner;​public class Main {public static void main(String[] args) {Scanner s…