一、场景
本文使用的环境为:
- 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
启动后可以正常访问控制台,如图
三、出现问题
当我想把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容器
stop
、rm
掉后,再次执行启动命令,此时已发现无法打开控制台
四、排查
首先检查docker容器是否正常启动,发现不是这个问题
查看容器的日志,虽然没有报错信息,但是最后一行日志似乎给了我们线索,启动时一个插件都没有生效呢?
查看官方文档
进入
dockerhub
,搜索rabbitmq
,查看官方给的overview
里是否给了答案。很幸运,在overview
里我们发现了关于插件的介绍。
您还可以在
/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.conf
和rabbitmq.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
启动容器,直接打开控制台检查效果
问题解决