Docker Compose 重启 RabbitMQ 数据丢失?

前言

使用 Docker Compose 部署 RabbitMQ 时,容器重启后数据丢失是高频痛点:配置好的队列、交换机、消息全部清空,服务完全重置。

本文结合真实环境命令,直击核心问题,用最简配置解决数据持久化难题。


一、问题现场还原

1. 查看数据目录(关键证据)

执行命令查看 RabbitMQ 数据存储目录:

bash 复制代码
[root@localhost docker-compose-test]# ls rabbitmq-workflow/data/
rabbit@mqbroker-aaa  rabbit@mqbroker-aaa.pid  rabbit@mqbroker-aaa-plugins-expand

核心发现 :RabbitMQ 数据目录命名规则为 rabbit@容器主机名。

2. 核心配置(仅保留关键代码)

docker-compose.yaml 修复后的最简关键配置:

yaml 复制代码
version: '3.3'
services:
  # RabbitMQ消息队列服务
  rabbitmq-workflow:
    # 🔥 解决数据丢失的核心配置(固定主机名)
    hostname: mqbroker-aaa
    image: rabbitmq:3.9.21-management
    ports:
      - "5672:5672"
      - "15672:15672"

3. 故障现象

未配置 hostname 前:

  1. 启动容器并创建业务队列;
  2. 重启容器后,所有数据丢失;
  3. 数据目录自动生成新的随机名称文件夹,旧数据无法加载。

二、根因分析

RabbitMQ 重启丢数据的唯一核心原因:容器主机名不固定!

  1. RabbitMQ 数据目录强依赖容器内部主机名生成;
  2. Docker 默认主机名为随机容器ID,重启必变;
  3. 主机名变更 → RabbitMQ 无法识别旧数据目录 → 新建目录 → 数据丢失。

三、终极解决方案

只需要一行配置,固定容器内部主机名,彻底解决问题:

yaml 复制代码
hostname: mqbroker-aaa

配置后,容器重启主机名永久不变,RabbitMQ 始终读取同一数据目录。


四、验证修复效果

  1. 重启容器
bash 复制代码
docker-compose down && docker-compose up -d
  1. 查看固定主机名
bash 复制代码
docker exec rabbitmq-workflow hostname

输出:mqbroker-aaa(固定不变)

  1. 数据目录始终唯一,无新文件夹生成。

相关推荐
高频因子挖掘机2 分钟前
从第一行 Python 代码开始,个人量化项目应该先接入历史行情还是实时行情?
后端·github·api
高频因子挖掘机4 分钟前
个人开发者如何高效处理 A 股日 K 线数据?基于 QuantDash 的清洗思路与复权实战
后端·github·api
yunwei3716 分钟前
eBPF 实例教程:跟踪 Intel NPU 内核驱动操作
linux·后端·性能优化
高频因子挖掘机1 小时前
股票池代码为什么总有问题?从常见误区到可解释的校验报告
后端·github·api
考虑考虑8 小时前
nginx路由重写
运维·后端·自动化运维
JaguarJack9 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php·服务端
BingoGo9 小时前
PHP 紧急修复两项严重 RCE 漏洞,8.2 至 8.5 用户应立即升级
后端·php
金銀銅鐵10 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨10 小时前
spring auth 核心流程详解
java·后端·spring
高频因子挖掘机12 小时前
本地已有一年历史数据,第二天更新别只拉“昨天一天”:量化 K 线增量同步实践
后端·github·api