Docker 安装 RabbitMQ(单机)
大纲
RabbitMQ 单机部署
RabbitMQ 集群部署
前言
特别注意
RabbitMQ 的数据库名称规则是 NODENAME@hostname,由于 Docker 每次从 Docker Image 启动容器的时候会自动生成 hostname,这样一来之前保存在主机上的数据库就会没用了,包括之前创建的用户也会没有了。所以在创建容器的时候必须指定 hostname,比如 --hostname=my-rabbit,这样 Docker 容器启动后 RabbitMQ 就会一直读取固定目录中的数据。
Docker 快速安装
快速启动
这将启动一个 RabbitMQ 容器,默认监听端口为 5672。
1 | docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3.8.26 |
在容器启动后,如果等待约一分钟的时间,Docker 容器会输出以下日志信息。
1 | # 查看容器的日志信息 |
1 | =INFO REPORT==== 6-Jul-2015::20:47:02 === |
指定 vhost
通过 RABBITMQ_DEFAULT_VHOST 环境变量来指定 vhost,然后启动 RabbitMQ 容器。
1 | docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost rabbitmq:3.8.26 |
数据持久化
可以通过挂载数据卷的方式来实现 RabbitMQ 的数据持久化,然后启动 RabbitMQ 容器。
1 | docker run -d -v /usr/local/rabbitmq/data:/var/lib/rabbitmq --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost rabbitmq:3.8.26 |
开启控制台管理
使用默认启用了 Web 控制台管理功能的 RabbitMQ 镜像后,浏览器可以通过 http://localhost:15672 来访问 RabbitMQ 的 Web 控制台页面,登录的默认用户名和密码为 guest / guest。
1 | docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 rabbitmq:3.8.26-management |
提示
- 在上面的 Docker 命令中,
rabbitmq:3.8.26-management是镜像的完整名称,其中3.8.26是 RabbitMQ 的版本号,management表示该版本的镜像默认启用了 Web 控制台管理功能(无需额外配置)。 - 这里直接使用默认启用了 Web 控制台管理功能的 RabbitMQ 镜像(可以避免指定插件配置文件来启用 Web 控制台管理功能),比如
rabbitmq:3.8.26-management,默认的 Web 监听端口是15672,用户名和密码为guest / guest。
指定用户名和密码
通过 RABBITMQ_DEFAULT_USER 和 RABBITMQ_DEFAULT_PASS 环境变量来指定 RabbitMQ 的 Web 控制台的用户名和密码(默认是 guest / guest),然后启动 RabbitMQ 容器。
1 | docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 rabbitmq:3.8.26-management |
指定启用的插件列表
首先在宿主机创建插件列表的配置文件 enabled_plugins,然后将需要启用的插件列表写入配置文件中(注意:配置内容的尾部有一个点号),比如:
1 | [rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp]. |
然后在启动 RabbitMQ 容器时,将宿主机内的插件配置文件挂载到容器内部的 /etc/rabbitmq/enabled_plugins 位置
1 | docker run -d --hostname my-rabbit -v /usr/local/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins --name some-rabbit rabbitmq:3.8.26 |
Docker-Compose 安装
创建配置文件
创建 docker-compose.yml 配置文件并写入以下内容,其中 RABBITMQ_DEFAULT_USER 为用户名,RABBITMQ_DEFAULT_PASS 为用户密码,5672 为 RabbitMQ 的服务端口,15672 为 RabbitMQ 的 Web 控制台的端口。RabbitMQ 的 Web 控制台默认是未启用的,若需启用 Web 控制台的功能,可以挂载对应的配置文件到容器内的 /etc/rabbitmq/enabled_plugins,而配置文件的内容为 RabbitMQ 启用的插件列表。
1 | version: '3.5' |
若需要指定 RabbitMQ 容器使用静态 IP 地址,可以参考以下配置内容:
1 | version: '3.5' |
上述挂载的 /usr/local/rabbitmq/enabled_plugins 插件配置文件的内容如下(注意:末尾有个点号):
1 | [rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp]. |
启动容器
使用以下命令来创建并启动 RabbitMQ 容器,当容器启动完成后,浏览器可以通过 http://localhost:15672 来访问 RabbitMQ 的 Web 控制台页面。
1 | # 创建并启动 RabbitMQ 容器 |
常见问题
控制台页面提示警告信息
- 在登录 RabbitMQ 的 Web 控制台后,如果 Web 页面提示以下的警告信息:
1 | Stats in management UI are disabled on this node |
- 首先在宿主机内创建
management_agent.disable_metrics_collector.conf配置文件
1 | touch management_agent.disable_metrics_collector.conf |
- 接着往宿主机内的配置文件写入以下内容
1 | management_agent.disable_metrics_collector = false |
- 然后将宿主机内的配置文件挂载到 RabbitMQ 容器内的
/etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf位置
1 | version: '3.5' |
- 最后销毁容器,并重新启动容器
1 | # 销毁 RabbitMQ 容器 |
延迟队列插件的安装
构建 Docker 镜像
在 Docker 中,一般推荐使用 Dockerfile 来自定义构建带延迟队列插件的 RabbitMQ 镜像,这样可以实现延迟队列插件的持久化安装。
- 下载延迟队列插件(特别注意:延迟队列插件的版本必须与 RabbitMQ 版本兼容)
1 | wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.8.17/rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez |
- 创建 Dockerfile 文件
1 | FROM rabbitmq:3.8.26-management |
- 构建 Docker 镜像
1 | docker build -t rabbitmq-delayed:3.8.26-management . |
提示
Docker 基础镜像使用的是 rabbitmq:3.8.26-management,其中 3.8.26 是 RabbitMQ 的版本号,management 表示该版本的镜像默认启用了 Web 控制台管理功能(无需额外配置)。
Docker 安装插件
由于刚已经自主构建了带延迟队列插件的 RabbitMQ 镜像,因此可以直接使用,如下所示:
1 | docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 rabbitmq-delayed:3.8.26-management |
Docker-Compose 安装插件
由于刚已经自主构建了带延迟队列插件的 RabbitMQ 镜像,因此可以直接使用,如下所示:
1 | version: '3.5' |
验证延迟队列插件的安装
延迟队列插件安装成功后,在 RabbitMQ 的 Web 控制台中,打开 Exchanges 标签页,点击 Add a new exchange,就可以看到新的交换机类型(x-delayed_message),如下图所示:

或者可以进入 Docker 容器内部,查看插件列表:
1 | # 进入容器内部 |
