Docker Compose重启RabbitMQ数据丢失

 更新时间:2026年04月01日 08:18:57   作者:Oneslide  
本文主要介绍了Docker Compose重启RabbitMQ数据丢失,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

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

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

一、问题现场还原

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

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

[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 修复后的最简关键配置

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 无法识别旧数据目录 → 新建目录 → 数据丢失。

三、终极解决方案

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

hostname: mqbroker-aaa

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

四、验证修复效果

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

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

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

到此这篇关于Docker Compose重启RabbitMQ数据丢失的文章就介绍到这了,更多相关Docker Compose重启RabbitMQ丢失内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker离线部署docker,部署业务方式

    docker离线部署docker,部署业务方式

    这篇文章主要介绍了docker离线部署docker,部署业务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Docker如何使用nginx搭建tomcat集群(图文详解)

    Docker如何使用nginx搭建tomcat集群(图文详解)

    这篇文章主要介绍了Docker使用nginx搭建tomcat集群的教程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • docker-compose容器互相连接的实现

    docker-compose容器互相连接的实现

    本文主要介绍了docker-compose容器互相连接的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Docker上部署mysql8主从复制的实现

    Docker上部署mysql8主从复制的实现

    本文主要介绍了Docker上部署mysql8主从复制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 使用minikube安装k8s单节点集群方式

    使用minikube安装k8s单节点集群方式

    本文主要介绍了minikube的使用方法,包括安装、启动、镜像管理等步骤,minikube是一个专注于让Kubernetes更易于学习和开发的本地Kubernetes环境,支持在macOS、Linux和Windows上快速设置本地Kubernetes集群
    2024-10-10
  • Docker和虚拟机的区别及说明

    Docker和虚拟机的区别及说明

    Docker与虚拟机(VM)主要差异在于实现方式及效率,Docker通过打包应用及其依赖于容器中,直接与操作系统内核交互,实现跨系统运行,而无需模拟整个操作系统,这使得Docker在体积、启动速度及性能上优于虚拟机,虚拟机通过模拟硬件环境
    2024-11-11
  • Docker容器自启动的实现方法

    Docker容器自启动的实现方法

    这篇文章主要介绍了Docker容器自启动的实现方法,详细的介绍了Docker的 Restart policy命令,非常具有实用价值,需要的朋友可以参考下
    2018-09-09
  • Docker 拉取镜像超时(亲测 3 个有效镜像源 + 避坑指南)

    Docker 拉取镜像超时(亲测 3 个有效镜像源 + 避坑指南)

    Docker 默认镜像源在国外,国内访问经常抽风,常规操作应该是换国内镜像源,本文就来介绍一下三个国内稳定源,具有一定的参考价值,感兴趣的可以了解一下
    2025-08-08
  • 解决vscode docker插件docker.socket权限问题

    解决vscode docker插件docker.socket权限问题

    本文给大家分享关于vscode docker插件docker.socket权限问题,文末给大家提到vscode中docker插件无法连接的问题及解决方案,需要的朋友参考下吧
    2021-06-06
  • pod污点taint 与容忍度tolerations详解

    pod污点taint 与容忍度tolerations详解

    这篇文章主要为大家介绍了pod污点taint与容忍度tolerations示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论