大家好,我是Goya!
今天是Docker部署系列的第六篇文章:用Docker部署RabbitMQ。
RabbitMQ是消息队列(Message Queue)中最受欢迎的一员,它负责在微服务之间传递消息,实现系统的异步通信和解耦。很多分布式系统、秒杀系统都离不开它。

本篇要点:
✅ 一分钟启动RabbitMQ容器
✅ 开启管理插件,自带Web后台
✅ 设置用户名密码和数据持久化
✅ 使用docker-compose一键部署
✅ 支持远程客户端连接
✅ Python代码测试发送/接收消息
✅ 常见报错及解决方案

一、RabbitMQ是什么?

RabbitMQ是一个开源的消息代理和队列服务器,用Erlang语言编写。它的核心作用是接收、存储和转发消息。
举个生活例子:
外卖小哥(生产者)把餐送到中转站(RabbitMQ),你(消费者)有空时去取。这样外卖小哥不用等你开门,你也不用一直等着外卖,大家各干各的,这就是解耦。
应用场景:

  • 订单系统:下单后发消息,库存、积分、短信等系统异步处理
  • 秒杀系统:削峰填谷,防止瞬间高流量压垮数据库
  • 日志处理:集中收集各服务的日志

二、创建项目目录

我们先创建好项目目录,后面会用到:

# 创建项目目录
mkdir -p ~/docker/rabbitmq-project
cd ~/docker/rabbitmq-project

# 创建数据目录(用于持久化)
mkdir -p data
# 创建配置文件目录(可选,存放自定义配置)
mkdir -p config

目录结构说明:

~/docker/rabbitmq-project/
├── docker-compose.yml # 核心配置文件
├── data/ # 消息数据持久化
└── config/ # 自定义配置(rabbitmq.conf等)

三、编写docker-compose.yml

这是本文的核心!用docker-compose可以一键启动,方便管理。

vim docker-compose.yml

粘贴以下内容:

version: '3.8'

services:
  rabbitmq:
    image: rabbitmq:3.12-management
    container_name: rabbitmq
    restart: always
    ports:
      # 5672: 程序连接端口(Java/Python/Go等)
      - "5672:5672"
      # 15672: 管理后台端口(浏览器访问)
      - "15672:15672"
    environment:
      # 默认管理员账号密码
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: 123456
      # 时区设置(可选)
      TZ: Asia/Shanghai
    volumes:
      # 数据持久化:将容器内的数据目录挂载到宿主机
      - ./data:/var/lib/rabbitmq
      # 配置文件挂载(如果需要自定义配置)
      # - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
    # 健康检查(可选,确保服务真正可用)
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "ping"]
      interval: 30s
      timeout: 10s
      retries: 5
    # 日志配置(限制日志大小)
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

配置详解:
以下是整理后的表格形式:

参数说明
image: rabbitmq:3.12-management使用带管理界面的镜像
ports: - "5672:5672"消息通信端口,程序连接用
ports: - "15672:15672"管理后台端口,浏览器访问用
RABBITMQ_DEFAULT_USER设置管理员用户名
RABBITMQ_DEFAULT_PASS设置管理员密码
./data:/var/lib/rabbitmq数据持久化,重启容器消息不丢
healthcheck健康检查,确保服务真正就绪

四、启动RabbitMQ

4.1 一键启动

cd ~/docker/rabbitmq-project
docker-compose up -d

看到类似输出就成功:

Creating rabbitmq ... done

4.2 查看运行状态

docker-compose ps

应该显示 rabbitmq 状态为 Up。

4.3 查看启动日志

docker-compose logs -f

看到 Server startup complete 说明启动完成。按 Ctrl+C 退出日志查看。

五、验证RabbitMQ

5.1 访问管理后台

打开浏览器,访问:

http://你的服务器IP:15672

在这里插入图片描述

登录信息:

  • 用户名:admin

  • 密码:123456

成功登录后,你会看到RabbitMQ的管理界面,可以查看:

  • Overview:概览信息(连接数、队列数、消息速率)

  • Connections:当前客户端连接

  • Channels:通道

  • Exchanges:交换机

  • Queues:队列(核心!)

  • Admin:用户管理

5.2 测试消息收发(命令行)

通过管理后台创建队列和发送消息:
1.点击 Queues → Add a new queue

  • Type:Classic

  • Name:test_queue

  • 点击 Add queue

2.点击刚创建的队列 test_queue

3.在 Publish message 区域:

  • Payload:Hello RabbitMQ!

  • 点击 Publish message

4.在 Get messages 区域:

  • 点击 Get Message(s),就能看到刚才发送的消息
    在这里插入图片描述
    在这里插入图片描述

六、数据持久化验证

测试一下重启容器后数据是否还在:

# 重启容器
docker-compose restart

# 再次访问管理后台 http://IP:15672
# 检查之前创建的 test_queue 是否还在

如果队列还在,说明数据持久化生效!

七、配置防火墙/安全组

Ubuntu系统(UFW):

# 开放5672和15672端口
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw status

云服务器:
在阿里云/腾讯云/华为云的控制台,找到「安全组」,添加入方向规则:

  • 端口:5672, 15672

  • 授权对象:0.0.0.0/0(允许所有IP,或指定你的IP)

八、docker-compose常用命令

# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 重启所有服务
docker-compose restart

# 查看实时日志
docker-compose logs -f

# 查看某个服务的日志
docker-compose logs rabbitmq

# 进入容器
docker-compose exec rabbitmq bash

# 执行rabbitmqctl命令(管理)
docker-compose exec rabbitmq rabbitmqctl list_queues

# 查看容器状态
docker-compose ps

# 停止并删除容器(数据还在,因为挂载了本地)
docker-compose down

# 停止并删除容器+删除数据卷(谨慎!数据会丢)
docker-compose down -v

九、常见问题排查

Q1:容器启动失败

# 查看错误日志
docker-compose logs rabbitmq

常见错误:

  • 端口被占用:修改docker-compose.yml中的端口映射

  • 权限不足:chmod -R 777 ./data
    Q2:管理后台无法访问(15672)

# 检查端口监听
netstat -tlnp | grep 15672

# 检查防火墙
ufw status

# 云服务器:检查安全组是否开放15672

Q3:Python代码连接不上

# 测试网络连通性
telnet 你的服务器IP 5672

# 检查Python代码中的IP、用户名、密码是否正确
# 确认安全组/防火墙开放了5672端口

Q4:容器名冲突

# 查看冲突的容器
docker ps -a | grep rabbitmq

# 删除旧容器
docker rm -f rabbitmq

# 重新启动
docker-compose up -d

Q5:数据持久化不生效
检查docker-compose.yml中的volumes配置:

volumes:
  - ./data:/var/lib/rabbitmq  # 确保路径正确

然后重启:

docker-compose down
docker-compose up -d

Q6:忘记密码怎么办?

# 进入容器
docker-compose exec rabbitmq bash

# 重置密码(例如重置admin密码)
rabbitmqctl change_password admin 新密码

# 或者创建新管理员
rabbitmqctl add_user 新用户 新密码
rabbitmqctl set_user_tags 新用户 administrator

十三、总结
通过本文,我们成功实现了:

实现功能与验证方法

功能实现方式验证方法
Docker部署RabbitMQdocker-composedocker-compose ps
开启管理插件使用management镜像浏览器访问15672
设置用户名密码环境变量登录管理后台
数据持久化数据卷挂载重启容器后数据还在

现在你的服务器上已经有了RabbitMQ消息队列,可以用于微服务通信、异步任务处理等场景。
搞定! 🎯 你的Docker全家桶又添一员大将!

如果本文对你有帮助,欢迎点赞、收藏、评论!

更多推荐