rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台

本文涉及的产品
访问控制,不限时长
日志服务 SLS,月写入数据量 50GB 1个月
简介: rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台

一、场景

本文使用的环境为:

  • linux
  • docker
  • rabbitmq镜像

二、正常情况

正常情况下,我们启动rabbitmq的docker容器,只需要输入以下命令即可,

docker run \
-d \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
--network my-bridge \
--ip 172.18.0.6 \
--restart=always \
--name rabbitmq \
docker.io/rabbitmq

启动后可以正常访问控制台,如图

正常访问控制台.png

三、出现问题

当我想把rabbitmq的运行日志输出到文件时,使用docker挂载一个宿主机的配置文件,在此配置文件中对日志文件进行配置如下所示

  • 新建保存配置文件的目录并进入该目录

    cd /usr/local/rabbitmq/conf
    
  • 编辑配置文件vim rabbitmq.conf,该配置文件名称固定

    # 日志级别
    log.file.level = info
    # 日志文件位置
    log.dir = /var/log/rabbitmq
    # 日志文件名称
    log.file = rabbit.log
    # 每天0点滚动日志文件
    log.file.rotation.date = $D0
    # 日志文件的最大存档数为7
    log.file.rotation.count = 7
    # 控制台api访问日志
    management.http_log_dir = /var/log/rabbitmq/access
    
  • 编辑容器的启动命令,在之前的命令上添加两个挂载配置,分别挂载配置文件日志文件的路径

    docker run \
    -d \
    -p 5672:5672 \
    -p 15672:15672 \
    -e RABBITMQ_DEFAULT_USER=admin \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --network my-bridge \
    --ip 172.18.0.6 \
    --restart=always \
    --name rabbitmq \
    -v /usr/local/rabbitmq/conf:/etc/rabbitmq \
    -v /usr/local/rabbitmq/logs:/var/log/rabbitmq \
    docker.io/rabbitmq
    
  • 将正常运行的docker容器stoprm掉后,再次执行启动命令,此时已发现无法打开控制台

    无法访问网页.png

四、排查

  • 首先检查docker容器是否正常启动,发现不是这个问题

    容器正常启动.png

  • 查看容器的日志,虽然没有报错信息,但是最后一行日志似乎给了我们线索,启动时一个插件都没有生效呢?

    容器启动日志.png

  • 查看官方文档

    进入dockerhub,搜索rabbitmq,查看官方给的overview里是否给了答案。很幸运,在overview里我们发现了关于插件的介绍。

    启动插件的官文.png

您还可以在/etc/rabbitmq/enabled_plugins处挂载一个文件,其内容是以句点结尾的原子的erlang列表。

例如:文件名为enabled_plugins

[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].

注意不要漏掉最后的标点符号.

五、解决

看到这里,应该就是此问题的解决方案了。

然后我们发现enabled_plugins文件和配置文件是在同一个目录下的,可能正是因为我们只挂载了配置文件rabbitmq.conf,却忽略了该文件而导致了问题。

  • 在宿主机的配置文件rabbitmq.conf相同目录下新建文件enabled_plugins

    [rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].
    
  • 再检查容器的启动命令,宿主机/usr/local/rabbitmq/conf目录下的rabbitmq.confrabbitmq.conf都已经挂载到容器的/etc/rabbitmq目录下了

    docker run \
    -d \
    -p 5672:5672 \
    -p 15672:15672 \
    -e RABBITMQ_DEFAULT_USER=admin \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --network my-bridge \
    --ip 172.18.0.6 \
    --restart=always \
    --name rabbitmq \
    -v /usr/local/rabbitmq/conf:/etc/rabbitmq \
    -v /usr/local/rabbitmq/logs:/var/log/rabbitmq \
    docker.io/rabbitmq
    
  • 启动容器,直接打开控制台检查效果

  • 问题解决

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
4月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
270 3
|
22天前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
54 0
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
30天前
|
消息中间件 数据安全/隐私保护 Docker
Docker安装rabbitmq
如何使用Docker安装和配置RabbitMQ服务,包括拉取RabbitMQ镜像、创建容器、配置持久化和访问管理界面的步骤。
76 0
Docker安装rabbitmq
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
3月前
|
消息中间件 Docker 容器
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
这篇文章提供了RabbitMQ的安装和基本使用教程,包括如何使用Docker拉取RabbitMQ镜像、创建容器、通过浏览器访问管理界面,以及如何创建交换机、队列、绑定和使用direct、fanout和topic三种类型的交换器进行消息发布和接收的测试。
消息中间件RabbitMQ---Docker安装RabbitMQ、以及RabbitMQ的基本使用【二】
|
4月前
|
消息中间件 PHP 数据安全/隐私保护
docker安装rabbitmq并配置hyperf使用
通过以上步骤,您可以实现在Docker容器中安装和配置RabbitMQ,并在PHP的Hyperf框架中进行集成和使用。这种方式为开发者提供了快速部署并实现消息队列解决方案的能力,同时维持了环境与生产环境的一致性,从而为开发高效的分布式应用程序提供了便利。
88 3
docker安装rabbitmq并配置hyperf使用
|
6月前
|
Java 容器 Spring
Spring的加载配置文件、容器和获取bean的方式
Spring的加载配置文件、容器和获取bean的方式
51 3
Spring的加载配置文件、容器和获取bean的方式
|
5月前
|
数据安全/隐私保护 Docker 容器
RabbitMQ+docker安装教程
RabbitMQ+docker安装教程
|
5月前
|
消息中间件 存储 数据安全/隐私保护
docker部署rabbitmq
docker部署rabbitmq
65 0
|
5月前
|
消息中间件 网络性能优化
消息队列 MQ产品使用合集之通过MQTT控制台查询不到设备轨迹或消息轨迹是什么原因
阿里云消息队列MQ(Message Queue)是一种高可用、高性能的消息中间件服务,它允许您在分布式应用的不同组件之间异步传递消息,从而实现系统解耦、流量削峰填谷以及提高系统的可扩展性和灵活性。以下是使用阿里云消息队列MQ产品的关键点和最佳实践合集。