一、场景

本文使用的环境为:

  • 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

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

windows宿主机 连容器网络_windows宿主机 连容器网络

三、出现问题

当我想把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掉后,再次执行启动命令,此时已发现无法打开控制台

四、排查

  • 首先检查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.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
  • 启动容器,直接打开控制台检查效果
  • 问题解决

纸上得来终觉浅,绝知此事要躬行。

————————————————我是万万岁,我们下期再见————————————————