Docker搭建rabbitmq
如果只是 Docker Compose 安装 RabbitMQ,推荐直接使用官方镜像。
docker-compose.yml
services: rabbitmq: image: rabbitmq:4.0-management container_name: rabbitmq restart: unless-stopped hostname: rabbitmq ports: - "5672:5672" # AMQP - "15672:15672" # Web管理后台 environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: 123456 TZ: Asia/Shanghai volumes: - ./rabbitmq/data:/var/lib/rabbitmq - ./rabbitmq/log:/var/log/rabbitmq healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 30s timeout: 10s retries: 5
启动
docker compose up -d
查看容器
docker ps
查看日志
docker logs -f rabbitmq
登录管理后台
浏览器访问
http://服务器IP:15672
例如
http://192.168.1.100:15672
账号
admin
密码
123456
查看插件
进入容器
docker exec -it rabbitmq bash
查看插件
rabbitmq-plugins list
RabbitMQ 官方 management 镜像默认已经启用了:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
所以一般不用自己开启。
开启 MQTT(可选)
如果需要 MQTT:
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_mqtt
开放端口
ports: - "1883:1883"
开启 STOMP(可选)
docker exec -it rabbitmq rabbitmq-plugins enable rabbitmq_stomp
开放
ports: - "61613:61613"
开启延迟消息插件(推荐)
下载对应版本的
rabbitmq_delayed_message_exchange
放到
./rabbitmq/plugins
compose 增加
volumes: - ./rabbitmq/plugins:/plugins
启动后执行
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
常用命令
查看用户
docker exec rabbitmq rabbitmqctl list_users
查看虚拟主机
docker exec rabbitmq rabbitmqctl list_vhosts
查看队列
docker exec rabbitmq rabbitmqctl list_queues
查看交换机
docker exec rabbitmq rabbitmqctl list_exchanges
完整目录结构
project/ ├── docker-compose.yml └── rabbitmq/ ├── data/ ├── log/ └── plugins/
如果你的项目使用的是 x-delayed-message 交换机,那么必须安装 rabbitmq_delayed_message_exchange 插件,否则会报类似错误:
PRECONDITION_FAILED - unknown exchange type 'x-delayed-message'
安装插件
方法一:推荐(自定义 Docker 镜像)
目录结构
rabbitmq/ ├── docker-compose.yml ├── Dockerfile └── plugins/ └── rabbitmq_delayed_message_exchange-*.ez
Dockerfile
FROM rabbitmq:4-management COPY plugins/*.ez /plugins/ RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
--offline表示在镜像构建时就启用插件,无需容器启动后再执行。
docker-compose.yml
services: rabbitmq: build: . container_name: rabbitmq hostname: rabbitmq restart: unless-stopped ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: admin RABBITMQ_DEFAULT_PASS: 123456 TZ: Asia/Shanghai volumes: - ./data:/var/lib/rabbitmq - ./log:/var/log/rabbitmq
启动:
docker compose up -d --build
方法二:直接在运行中的容器安装
下载与你 RabbitMQ 版本完全对应 的 .ez 插件文件,复制到容器:
docker cp rabbitmq_delayed_message_exchange-4.2.0.ez rabbitmq:/plugins/
进入容器:
docker exec -it rabbitmq bash
启用插件:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
重启:
docker restart rabbitmq
验证:
rabbitmq-plugins list | grep delayed
应看到:
[E*] rabbitmq_delayed_message_exchange
其中 E 表示已启用。
下载插件
插件发布页:
rabbitmq-delayed-message-exchange Releases
请注意,插件版本必须与 RabbitMQ 主版本兼容。例如:
| RabbitMQ | 插件 |
|---|---|
| 3.13.x | v3.13.x |
| 4.0.x | v4.0.x |
| 4.1.x | v4.1.x |
| 4.2.x | v4.2.0 |
官方发布页会说明每个插件对应支持的 RabbitMQ 版本。(GitHub)
注意事项
如果你正在使用 RabbitMQ 4.3+,官方已经弃用并归档了 rabbitmq_delayed_message_exchange 插件,推荐考虑新的延迟消息方案,因为旧插件存在架构限制。(RabbitMQ)
我建议先确认你的 RabbitMQ 版本
请执行:
docker exec rabbitmq rabbitmqctl version
或者:
docker images rabbitmq
把输出发给我(例如 3.13.7、4.0.7、4.2.0),我可以直接给你对应版本的 .ez 插件下载地址和完整的 Dockerfile。