本地RabbitMQ Docker容器修改日志级别启动失败,如何解决?
在Mac本地使用rabbitmq:3.10镜像时,默认RabbitMQ会输出info级别的控制台日志,产生大量冗余。按照官方文档,打算通过额外的.conf文件修改日志级别,指定RABBITMQ_CONFIG_FILES环境变量指向配置目录,Dockerfile内容如下:
FROM rabbitmq:3.10 ENV RABBITMQ_CONFIG_FILES=/local/my-conf.d/ COPY ./config/ /local/my-conf.d/ RUN chown -r rabbitmq:rabbitmq /local/my-conf.d/
本地config文件夹中有disable_logging.conf文件,内容为:
log.console.level = error
执行以下命令构建并运行镜像:
docker build -t rabbitmqlocal .
docker run rabbitmqlocal
但无论是否调整.conf文件、是否执行chown操作,RabbitMQ启动时都会出现如下日志(被误认为报错):
2022-09-26 12:41:03.377639+00:00 [notice] <0.44.0> Application syslog exited with reason: stopped ... Config file(s): /local/my-conf.d/disable_logging.conf
请问如何修改本地RabbitMQ Docker容器的日志级别?
解决方法
1. 修正环境变量的配置方式
你误用了环境变量:RabbitMQ 3.8+版本中,RABBITMQ_CONFIG_FILES并非用来指定配置目录,正确的变量是RABBITMQ_CONF_ENV_FILE;如果仅加载单个配置文件,直接用RABBITMQ_CONFIG_FILE指向文件路径即可。
方案A:加载单个配置文件
修改Dockerfile的环境变量:
FROM rabbitmq:3.10 ENV RABBITMQ_CONFIG_FILE=/local/my-conf.d/disable_logging.conf COPY ./config/ /local/my-conf.d/ RUN chown -R rabbitmq:rabbitmq /local/my-conf.d/
方案B:加载目录下所有配置文件
如果后续需要添加多个配置文件,使用RABBITMQ_CONF_ENV_FILE:
FROM rabbitmq:3.10 ENV RABBITMQ_CONF_ENV_FILE=/local/my-conf.d/ COPY ./config/ /local/my-conf.d/ RUN chown -R rabbitmq:rabbitmq /local/my-conf.d/
2. 修正权限命令参数
注意chown的递归参数是大写-R,小写-r在部分系统中不生效,保留正确的权限设置命令。
3. 澄清“报错”的本质
启动时出现的Application syslog exited with reason: stopped是正常信息,并非配置错误。RabbitMQ默认未启用syslog插件,该提示是插件正常停止的日志,无需在意。
4. 更简洁的备选方案:直接用环境变量设置
无需配置文件,直接在Dockerfile中通过环境变量指定日志级别:
FROM rabbitmq:3.10 ENV RABBITMQ_LOG_CONSOLE_LEVEL=error
这种方式无需复制配置文件和设置权限,启动后控制台只会输出error及以上级别的日志。
内容的提问来源于stack exchange,提问作者Stan Wiechers

