使用Docker Compose部署ejabberd无法写入日志文件求助
解决ejabberd Docker部署日志目录无法生成日志的问题
错误原因分析
从Docker日志的报错信息:
2023-09-09 07:10:37.559689+00:00 [critical] Failed to set logging: {error,
{handler_not_added,
{open_failed,"/home/ejabberd/logs",eisdir}}}
eisdir的含义是程序尝试打开的路径是目录,但实际需要的是文件路径。你在环境变量中设置EJABBERD_LOG_PATH=/home/ejabberd/logs,将日志路径指向了目录,而ejabberd要求这个变量必须指向具体的日志文件,因此无法创建日志处理器,导致日志文件无法生成。
解决步骤
1. 修改Docker Compose中的日志路径配置
将EJABBERD_LOG_PATH改为目录下的具体文件名,比如/home/ejabberd/logs/ejabberd.log:
ejabberd: # ... 其他配置 environment: # ... 其他环境变量 - EJABBERD_LOG_PATH=/home/ejabberd/logs/ejabberd.log
2. 确认宿主机日志目录权限
虽然当前目录权限为777,可执行以下命令确保容器内root用户拥有完整读写权限:
chown -R root:root ./ejabberd/logs chmod -R 755 ./ejabberd/logs
3. 重启ejabberd容器
执行命令重启服务,使配置生效:
docker-compose down && docker-compose up -d
可选:检查ejabberd配置文件
若问题仍存在,打开挂载的ejabberd.yml,确认日志相关配置无冲突,示例配置如下:
loglevel: info log_rotate_size: 10485760 # 单日志文件最大10MB log_rotate_count: 10 # 保留10个历史日志文件
内容的提问来源于stack exchange,提问作者Chan
相关产品推荐
相关产品推荐

