自建Redmine 4.2.10-passenger Docker容器内部不生成日志求助
Redmine 4.2.10-Passenger容器不生成production.log的解决办法
问题原因
官方Redmine Passenger镜像默认配置中,Passenger会将Rails应用的日志输出重定向到容器的stdout和stderr,因此不会在/usr/src/redmine/log目录下生成production.log文件——这就是你能通过docker logs查看日志,但找不到物理日志文件的核心原因。
解决方法
1. 修改Redmine的日志输出配置
你可以修改Redmine的生产环境配置,强制将日志写入文件:
- 进入运行中的容器:
docker exec -it my-redmine-container bash - 编辑
config/environments/production.rb文件,找到日志相关配置块,替换为:config.logger = ActiveSupport::Logger.new('/usr/src/redmine/log/production.log') config.logger.level = Logger::INFO # 可选:添加日志轮转配置,防止日志文件过大 config.logger = ActiveSupport::Logger.new( '/usr/src/redmine/log/production.log', 10, # 保留的日志文件数量 1024 * 1024 * 10 # 单个日志文件大小上限(10MB) ) - 重启容器让配置生效:
docker restart my-redmine-container
如果是自定义构建镜像,可以在Dockerfile中加入修改配置的步骤,避免每次重启容器重复操作。
2. 关闭Passenger的日志重定向
Passenger默认会捕获应用日志并转发到容器标准输出,你可以通过启动参数关闭这个行为:
- 如果你是用
docker run启动容器,修改启动命令,在Passenger启动参数中添加--disable-logging:docker run -d --name my-redmine-container \ # 其他挂载、环境变量配置 redmine:4.2.10-passenger passenger start --disable-logging - 这样Rails会按照自身配置将日志写入
production.log文件。
3. 注意权限问题
如果要将/usr/src/redmine/log挂载到宿主机持久化卷,需要确保宿主机卷目录的权限匹配容器内Redmine运行用户(通常是redmine用户,UID为999),否则会因权限不足无法写入日志:
# 在宿主机创建日志目录并设置权限 mkdir -p /path/to/redmine-log chown 999:999 /path/to/redmine-log
然后启动容器时挂载该目录:
docker run -d --name my-redmine-container \ -v /path/to/redmine-log:/usr/src/redmine/log \ # 其他配置 redmine:4.2.10-passenger
内容的提问来源于stack exchange,提问作者Martin Jose
相关产品推荐
相关产品推荐

