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

简介: 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版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1129 108
|
9月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
666 57
|
6月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
705 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
719 6
|
6月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
605 6
|
9月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
562 59
|
8月前
|
缓存 Ubuntu Docker
Ubuntu环境下删除Docker镜像与容器、配置静态IP地址教程。
如果遇见问题或者想回滚改动, 可以重启系统.
510 16

热门文章

最新文章