ARTICLE · 1080696
Docker 安装 RabbitMQ 教程
适用场景:Windows 11 + WSL / Linux / Docker 环境本教程采用 Docker 命名卷 方式持久化 RabbitMQ 数据,风格与 MySQL、Redis 的 Docker 安装方式保持一致。
1. 本次安装目标
本次安装 RabbitMQ,并完成以下目标:
使用 Docker 安装 RabbitMQ 3.8.8
使用带 Web 管理后台的
management镜像支持浏览器访问 RabbitMQ 管理页面
使用 Docker 命名卷持久化数据
使用 Docker 命名卷持久化日志
设置 RabbitMQ 默认账号密码
设置北京时间
设置健康检查
设置 Docker 自动重启
验证电脑重启后 RabbitMQ 仍然可用
验证 RabbitMQ 队列数据不会丢失
2. 最终安装版本
| 项目 | 内容 |
|---|---|
| RabbitMQ 版本 | 3.8.8-management |
| RabbitMQ 服务端口 | 5672 |
| RabbitMQ 管理后台端口 | 15672 |
| 默认用户名 | admin |
| 默认密码 | 123456 |
| 数据卷 | rabbitmq_data |
| 日志卷 | rabbitmq_log |
| 容器名称 | rabbitmq |
| 主机名 | rabbitmq-host |
| 时区 | Asia/Shanghai |
| 重启策略 | --restart=always |
3. 拉取 RabbitMQ 镜像
执行命令:
docker pull rabbitmq:3.8.8-management说明:
rabbitmq:3.8.8-management表示安装 RabbitMQ 3.8.8,并且自带 Web 管理后台。
如果只使用:
docker pull rabbitmq:3.8.8默认是不带浏览器管理后台的,不适合新手学习和本地开发调试。
4. 启动 RabbitMQ 容器
执行下面命令:
docker run -d \--name rabbitmq \--hostname rabbitmq-host \-p5672:5672 \-p15672:15672 \-eRABBITMQ_DEFAULT_USER=admin \-eRABBITMQ_DEFAULT_PASS=123456 \-eRABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456 \-eTZ=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=always \ rabbitmq:3.8.8-management
5. 命令参数说明
| 参数 | 说明 |
|---|---|
docker run -d | 后台启动容器 |
--name rabbitmq | 容器名称叫 rabbitmq |
--hostname rabbitmq-host | 设置 RabbitMQ 节点主机名 |
-p 5672:5672 | RabbitMQ 服务连接端口,Java / Spring Boot 程序连接使用 |
-p 15672:15672 | RabbitMQ Web 管理后台端口,浏览器访问使用 |
RABBITMQ_DEFAULT_USER=admin | 设置默认用户名 |
RABBITMQ_DEFAULT_PASS=123456 | 设置默认密码 |
RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_123456 | 固定 Erlang Cookie,方便后续稳定运行或扩展集群 |
TZ=Asia/Shanghai | 设置容器时区为北京时间 |
-v rabbitmq_data:/var/lib/rabbitmq | 使用 Docker 命名卷持久化 RabbitMQ 数据 |
-v rabbitmq_log:/var/log/rabbitmq | 使用 Docker 命名卷持久化 RabbitMQ 日志 |
--health-cmd="rabbitmq-diagnostics -q ping" | 设置健康检查命令 |
--health-interval=30s | 每 30 秒检查一次 |
--health-timeout=10s | 每次检查超时时间 10 秒 |
--health-retries=5 | 连续失败 5 次才认为不健康 |
--restart=always | Docker 启动后自动启动 RabbitMQ |
rabbitmq:3.8.8-management | 使用 RabbitMQ 3.8.8 管理后台版本 |
6. 和 MySQL 安装方式的对应关系
之前 MySQL 5.7 的安装命令类似:
docker run -d \--name mysql57 \-p3306:3306 \-eMYSQL_ROOT_PASSWORD=123456 \-v mysql57_data:/var/lib/mysql \--restart=always \ mysql:5.7 \--character-set-server=utf8mb4 \--collation-server=utf8mb4_general_ci
RabbitMQ 的安装方式与 MySQL 类似:
| MySQL | RabbitMQ | 说明 |
|---|---|---|
--name mysql57 | --name rabbitmq | 容器名称 |
-p 3306:3306 | -p 5672:5672 | 服务连接端口 |
| 无 | -p 15672:15672 | RabbitMQ 管理后台端口 |
MYSQL_ROOT_PASSWORD=123456 | RABBITMQ_DEFAULT_PASS=123456 | 默认密码 |
-v mysql57_data:/var/lib/mysql | -v rabbitmq_data:/var/lib/rabbitmq | 数据持久化 |
mysql:5.7 | rabbitmq:3.8.8-management | 镜像版本 |
7. 查看 RabbitMQ 是否启动成功
执行:
docker ps正常情况下可以看到类似内容:
rabbitmq:3.8.8-management Up ... (healthy) 0.0.0.0:5672->5672/tcp, 0.0.0.0:15672->15672/tcp rabbitmq重点看这几个信息:
rabbitmqUp ... (healthy)0.0.0.0:5672->5672/tcp0.0.0.0:15672->15672/tcp
如果刚启动时显示:
health: starting这是正常的,等几十秒后再执行:
docker ps正常会变成:
healthy8. 浏览器访问 RabbitMQ 管理后台
浏览器访问:
http://localhost:15672登录账号:
用户名:admin密码:123456
登录成功后,可以看到 RabbitMQ 管理后台页面。
9. RabbitMQ 两个端口的区别
| 端口 | 用途 |
|---|---|
5672 | 程序连接 RabbitMQ 使用,例如 Java / Spring Boot |
15672 | 浏览器访问 RabbitMQ 管理后台使用 |
所以浏览器访问的是:
http://localhost:15672不是:
http://localhost:567210. 查看 RabbitMQ 日志
执行:
docker logs -f rabbitmq如果看到类似内容:
Server startup complete说明 RabbitMQ 服务启动完成。
退出日志查看可以按:
Ctrl + C11. 查看 Docker 数据卷
执行:
docker volume ls正常可以看到:
rabbitmq_datarabbitmq_log
你的本地环境中还可能看到:
mysql57_dataredis_datarabbitmq_datarabbitmq_log
这说明 MySQL、Redis、RabbitMQ 都已经使用 Docker 命名卷做了数据持久化。
12. 查看 RabbitMQ 数据卷详情
查看 RabbitMQ 数据卷:
docker volume inspect rabbitmq_data查看 RabbitMQ 日志卷:
docker volume inspect rabbitmq_log这些命令可以看到数据卷在 Docker 内部的实际存储位置。
13. 创建测试队列
进入 RabbitMQ 管理后台:
http://localhost:15672点击顶部菜单:
Queues找到:
Add a new queue创建一个测试队列:
test_queue创建成功后,页面会显示:
All queues (1)并且可以看到:
test_queue14. 验证 RabbitMQ 数据持久化
创建 test_queue 后,重启 RabbitMQ 容器:
docker restart rabbitmq然后刷新 RabbitMQ 管理后台。
如果还能看到:
test_queue说明容器重启后,RabbitMQ 队列数据没有丢失。
这就证明:
rabbitmq_data 数据卷持久化成功15. 验证电脑重启后是否生效
电脑重启后,重新进入 WSL 或终端,执行:
docker ps正常可以看到:
rabbitmq Up ... (healthy)mysql57 Up ...redis Up ...
然后执行:
docker volume ls正常可以看到:
mysql57_dataredis_datarabbitmq_datarabbitmq_log
再用浏览器访问:
http://localhost:15672进入 Queues 页面,如果还能看到:
test_queue说明:
电脑重启后 RabbitMQ 自动启动成功电脑重启后 RabbitMQ 数据持久化成功
16. 常用 Docker 命令
查看运行中的容器
docker ps查看所有容器
docker ps -a启动 RabbitMQ
docker start rabbitmq停止 RabbitMQ
docker stop rabbitmq重启 RabbitMQ
docker restart rabbitmq查看 RabbitMQ 日志
docker logs -f rabbitmq进入 RabbitMQ 容器
docker exec -it rabbitmq bash删除 RabbitMQ 容器
docker rm -f rabbitmq注意:删除容器不会删除 rabbitmq_data 和 rabbitmq_log 数据卷。
17. 重新创建 RabbitMQ 容器但保留数据
如果容器有问题,可以删除容器:
docker rm -f rabbitmq然后重新执行安装命令:
docker run -d \ --name rabbitmq \ --hostname rabbitmq-host \ -p 5672:5672 \ -p 15672:15672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=123456 \ -e RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_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=always \ rabbitmq:3.8.8-management
只要没有删除数据卷:
rabbitmq_datarabbitmq_log
RabbitMQ 的队列、交换机、用户、权限等数据一般都还在。
18. 彻底删除 RabbitMQ
如果想彻底删除 RabbitMQ 容器和数据,执行:
docker rm -f rabbitmq再删除数据卷:
docker volume rm rabbitmq_data删除日志卷:
docker volume rm rabbitmq_log注意:执行后 RabbitMQ 的数据会被彻底删除,包括队列、交换机、消息、用户、权限等。
19. Spring Boot 连接 RabbitMQ 配置
如果 Spring Boot 项目运行在本机,可以这样配置:
spring: rabbitmq: host: localhost port: 5672 username: admin password: 123456 virtual-host: /
说明:
| 配置 | 说明 |
|---|---|
host: localhost | 本机连接 RabbitMQ |
port: 5672 | RabbitMQ 服务端口 |
username: admin | 用户名 |
password: 123456 | 密码 |
virtual-host: / | 默认虚拟主机 |
如果 Spring Boot 项目也运行在 Docker 容器里,host 不要写 localhost,要写 RabbitMQ 容器名或 Docker 网络里的服务名,例如:
spring: rabbitmq: host: rabbitmq port: 5672 username: admin password: 123456 virtual-host: /
20. 当前本地开发环境总结
目前本地 Docker 环境中已经有:
| 服务 | 容器名 | 端口 | 数据卷 |
|---|---|---|---|
| MySQL 5.7 | mysql57 | 3306 | mysql57_data |
| Redis 6.2 | redis | 6379 | redis_data |
| RabbitMQ 3.8.8 | rabbitmq | 5672 / 15672 | rabbitmq_data / rabbitmq_log |
这套环境已经可以支撑 Spring Boot 本地开发:
MySQL:关系型数据库
Redis:缓存
RabbitMQ:消息队列
21. 最终结论
本次 RabbitMQ 安装已经验证完成:
RabbitMQ 容器启动成功RabbitMQ 管理后台访问成功RabbitMQ 健康检查成功RabbitMQ 数据卷创建成功RabbitMQ 日志卷创建成功test_queue 队列创建成功容器重启后队列未丢失电脑重启后容器自动启动成功电脑重启后队列仍然存在
最终推荐安装命令如下:
docker run -d \ --name rabbitmq \ --hostname rabbitmq-host \ -p 5672:5672 \ -p 15672:15672 \ -e RABBITMQ_DEFAULT_USER=admin \ -e RABBITMQ_DEFAULT_PASS=123456 \ -e RABBITMQ_ERLANG_COOKIE=rabbitmq_cookie_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=always \ rabbitmq:3.8.8-management
22. 注意事项
不要随便删除数据卷:
docker volume rm rabbitmq_data不要随便执行 Docker 清理命令:
docker system prune -a --volumes这个命令可能会删除数据卷,导致 MySQL、Redis、RabbitMQ 数据丢失。
本地学习可以使用
admin / 123456,但生产环境不要使用弱密码。RabbitMQ 管理后台端口是
15672,程序连接端口是5672。如果浏览器打不开,优先检查:
docker ps看 RabbitMQ 是否是:
Up ... (healthy)