You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 21:12:13