Docker 安装 RabbitMQ 4 管理版新手教程
草稿状态:本文仅保存到 CSDN 草稿箱,待人工检查和实测后再决定是否发布。
摘要
本文使用 RabbitMQ 官方文档推荐的 Docker 镜像标签 rabbitmq:4-management,在 Docker Desktop 或 Docker Engine 中启动带 Web 管理后台的 RabbitMQ,完成端口映射、账号密码、命名卷持久化、健康检查、管理后台登录和队列数据验证。原始教程中的 RabbitMQ 3.8.8 已调整为当前文档推荐的 4-management 标签;如果项目必须兼容旧版本,应单独锁定经过验证的旧镜像标签。
一、RabbitMQ 的两个端口
- 5672:AMQP 客户端连接端口,Java、Spring Boot 等程序使用。
- 15672:Management UI 和 HTTP API 端口,浏览器访问使用。
本教程使用以下资源:
| 项目 | 值 |
|---|---|
| 镜像 | rabbitmq:4-management |
| 容器名 | rabbitmq |
| 数据卷 | rabbitmq_data |
| 日志卷 | rabbitmq_log |
| 管理用户 | appuser |
| 管理密码 | 启动命令中的自定义密码 |
二、前置准备
docker version
docker info
确认 Docker 已启动,并确认主机 5672、15672 端口没有被其他服务占用。机器上已有 RabbitMQ 时,不要直接复用容器名和数据卷,先备份并查看现有资源。
三、拉取镜像
docker pull rabbitmq:4-management
docker image inspect rabbitmq:4-management
management 标签已经包含 RabbitMQ 管理插件和 Web 管理后台,不需要另外安装 rabbitmq_management 插件。
四、创建数据卷
docker volume create rabbitmq_data
docker volume create rabbitmq_log
docker volume inspect rabbitmq_data
docker volume inspect rabbitmq_log
RabbitMQ 数据挂载到 /var/lib/rabbitmq,日志挂载到 /var/log/rabbitmq。命名卷独立于容器,但卷不是备份,重要消息和配置仍需制定备份策略。
五、启动 RabbitMQ
先替换示例密码,再执行一行命令:
docker run -d --name rabbitmq --hostname rabbitmq-host -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=appuser -e RABBITMQ_DEFAULT_PASS=ChangeMe_123456 -e TZ=Asia/Shanghai -v rabbitmq_data:/var/lib/rabbitmq -v rabbitmq_log:/var/log/rabbitmq --health-cmd="rabbitmq-diagnostics -q ping" --health-interval=30s --health-timeout=10s --health-retries=5 --restart unless-stopped rabbitmq:4-management
ChangeMe_123456 只是示例密码,不能用于生产环境。RABBITMQ_DEFAULT_USER 和 RABBITMQ_DEFAULT_PASS 只在空数据目录首次初始化时创建用户;复用已有数据卷时,修改环境变量不会自动修改现有用户密码。
六、确认容器和健康状态
docker ps --filter "name=rabbitmq"
docker inspect --format "{{.State.Health.Status}}" rabbitmq
docker logs --tail 100 rabbitmq
健康状态变为 healthy 后再登录管理后台。如果还在 starting,先等待几秒;如果变为 unhealthy,优先查看日志。
七、登录管理后台
浏览器打开:
http://localhost:15672
填写启动命令中的 appuser 和密码。不要把默认账号 guest 用作远程客户端账号;RabbitMQ 对 guest 账号的远程访问有限制,教程使用自定义用户更适合本地开发。
八、创建队列并验证持久化
进入管理后台,在 Queues and Streams 中创建队列:
- 名称:demo.queue
- Durability:Durable
- Auto delete:关闭
Durable 队列只表示队列元数据可以持久化,消息是否在重启后保留还取决于消息发布时是否设置 persistent,以及消费者确认策略。不要只创建一个 Durable 队列就断言所有消息都不会丢。
也可以查看 RabbitMQ 状态:
docker exec rabbitmq rabbitmq-diagnostics -q ping
docker exec rabbitmq rabbitmqctl list_queues name durable messages
九、重启验证
docker restart rabbitmq
docker inspect --format "{{.State.Health.Status}}" rabbitmq
docker exec rabbitmq rabbitmqctl list_queues name durable messages
如果只是重启容器,命名卷中的 RabbitMQ 数据应继续可用。删除容器时不要误删 rabbitmq_data。
十、常用命令
docker start rabbitmq
docker stop rabbitmq
docker restart rabbitmq
docker logs -f rabbitmq
docker exec -it rabbitmq bash
docker rm -f rabbitmq
只删除容器、保留数据:
docker rm -f rabbitmq
重新创建容器时继续挂载 rabbitmq_data 和 rabbitmq_log。确认数据不再需要后,才执行:
docker volume rm rabbitmq_data
docker volume rm rabbitmq_log
十一、常见问题
1. 浏览器打不开 15672
检查容器端口映射、健康状态和日志。若主机端口被占用,可将映射改为 15673:15672,浏览器访问 15673。
2. 修改密码没有生效
这是因为数据卷已经初始化。进入容器执行:
docker exec -it rabbitmq rabbitmqctl change_password appuser NewStrongPassword_2026
3. 消息重启后消失
检查队列是否 Durable、消息是否设置 persistent、生产者是否等待确认、消费者是否正确 ack。RabbitMQ 的容器持久化不能替代消息投递确认。
十二、官方资料
总结
本教程完成了镜像拉取、命名卷挂载、管理后台访问、健康检查和队列持久化验证。原始教程中的固定弱密码和 RabbitMQ 3.8.8 版本没有直接照搬;实际部署仍应根据项目兼容性锁定镜像版本,并人工核对端口、密码、备份和消息确认策略。
更多推荐

所有评论(0)