大纲
前言
特别注意
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 2
| docker logs -f -n 100 some-rabbit
|
1 2 3 4 5 6 7 8
| =INFO REPORT==== 6-Jul-2015::20:47:02 === node : rabbit@my-rabbit home dir : /var/lib/rabbitmq config file(s) : /etc/rabbitmq/rabbitmq.config cookie hash : UoNOcDhfxW9uoZ92wh6BjA== log : tty sasl log : tty database dir : /var/lib/rabbitmq/mnesia/rabbit@my-rabbit
|
指定 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| version: '3.5'
services: rabbitmq: image: rabbitmq:3.8.26 container_name: some-rabbit hostname: my-rabbit privileged: false restart: always environment: - RABBITMQ_DEFAULT_VHOST=/ - RABBITMQ_DEFAULT_USER=user - RABBITMQ_DEFAULT_PASS=password ports: - 5672:5672 - 15672:15672 volumes: - '/usr/local/rabbitmq/data:/var/lib/rabbitmq' - '/usr/local/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins'
|
若需要指定 RabbitMQ 容器使用静态 IP 地址,可以参考以下配置内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| version: '3.5'
services: rabbitmq: image: rabbitmq:3.8.26 container_name: some-rabbit hostname: my-rabbit privileged: false restart: always networks: rabbitmq-network: ipv4_address: 172.175.0.5 environment: - RABBITMQ_DEFAULT_VHOST=/ - RABBITMQ_DEFAULT_USER=user - RABBITMQ_DEFAULT_PASS=password ports: - 5672:5672 - 15672:15672 volumes: - '/usr/local/rabbitmq/data:/var/lib/rabbitmq' - '/usr/local/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins'
networks: rabbitmq-network: name: rabbitmq-network driver: bridge ipam: config: - subnet: 172.175.0.0/24
|
上述挂载的 /usr/local/rabbitmq/enabled_plugins
插件配置文件的内容如下(注意:末尾有个点号):
1
| [rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].
|
启动容器
使用以下命令来创建并启动 RabbitMQ 容器,当容器启动完成后,浏览器可以通过 http://localhost:15672
来访问 RabbitMQ 的 Web 控制台页面。
1 2 3 4 5 6 7 8
| docker-compose up -d
docker-compose ps
docker logs some-rabbit
|
常见问题
控制台页面提示警告信息
- 在登录 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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| version: '3.5'
services: rabbitmq: image: rabbitmq:3.8.26 container_name: some-rabbit hostname: my-rabbit privileged: false restart: always environment: - RABBITMQ_DEFAULT_VHOST=/ - RABBITMQ_DEFAULT_USER=user - RABBITMQ_DEFAULT_PASS=password ports: - 5672:5672 - 15672:15672 volumes: - '/usr/local/rabbitmq/data:/var/lib/rabbitmq' - '/usr/local/rabbitmq/enabled_plugins:/etc/rabbitmq/enabled_plugins' - '/usr/local/rabbitmq/management_agent.disable_metrics_collector.conf:/etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf'
|
1 2 3 4 5
| docker compose down
docker compose up -d
|
延迟队列插件的安装
构建 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
|
1 2 3 4 5 6 7 8 9 10
| FROM rabbitmq:3.8.26-management
COPY rabbitmq_delayed_message_exchange-3.8.17.8f537ac.ez /opt/rabbitmq/plugins/
ENV RABBITMQ_ENABLED_PLUGINS_FILE=/etc/rabbitmq/enabled_plugins
RUN rabbitmq-plugins enable --offline rabbitmq_delayed_message_exchange
|
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| version: '3.5'
services: rabbitmq: image: rabbitmq-delayed:3.8.26-management container_name: some-rabbit hostname: my-rabbit privileged: false restart: always environment: - RABBITMQ_DEFAULT_VHOST=/ - RABBITMQ_DEFAULT_USER=user - RABBITMQ_DEFAULT_PASS=password ports: - 5672:5672 - 15672:15672 volumes: - '/usr/local/rabbitmq/data:/var/lib/rabbitmq'
|
验证延迟队列插件的安装
延迟队列插件安装成功后,在 RabbitMQ 的 Web 控制台中,打开 Exchanges
标签页,点击 Add a new exchange
,就可以看到新的交换机类型(x-delayed_message
),如下图所示:
![]()
或者可以进入 Docker 容器内部,查看插件列表:
1 2 3 4 5
| docker exec -it some-rabbit bash
rabbitmq-plugins list
|