docker容器的日志映射与时区问题

一般我们在使用docker安装odoo时会遇到映射文件夹死活看不到日志的问题,系统的日志又是UTC国际时,调试很不方便。下面简要分析一下。

1、日志存储问题

映射目录存在却没有log文件,99 % 是因为 Odoo 对 /var/log/odoo 没有写权限(你宿主机目录给的是 root,而容器里 odoo 进程以 uid 100运行)。

只要目录权限对,Odoo 启动瞬间就会创建 odoo.log 并持续写入;权限不对就静默失败,文件也不会生成。

首先我们要知道容器的odoo进程ID

docker exec odoo18-web-1 id odoo

此时假如返回的是uid=100(odoo) gid=101(odoo) groups=101(odoo)

那么可以设置宿主机的映射目录权限

sudo chown -R 100:101 /data/odoo18/logs
sudo chmod 755 /data/odoo18/logs

重启容器,恭喜你,可以在映射目录看到日志文件了。

但此时,日志时间还是UTC格式,我们进行下一步

2、时区

容器操作系统的本地时区 = Asia/Shanghai,Odoo 进程里真正生效的 TZ 环境变量 = Asia/Shanghai,但官方 Odoo 镜像入口脚本是 /entrypoint.sh,它会在启动时把容器系统时区硬链成 /etc/localtime,而 不会 自动给 odoo 用户设置 TZ 变量;
结果:系统时间是 CST,但 Python 的 datetime.now() 仍拿 UTC,日志里就继续打印 UTC 时间。

让 Odoo 直接读宿主机时区文件(最干净)

/etc/localtime/etc/timezone 挂进容器只读:

services:
  web:
    ...
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro

然后 去掉odoo.conf 里的

log_timezone = 'Asia/Shanghai'

这一行(或者留空/删除),因为当系统时区正确时,Odoo 默认就用本地时间,再写死反而容易冲突。

重启容器,可以看到日志已经变为宿主机的时间和时区了。

我是把odoo系统部署在Windows10,也遇到“日志时间还是UTC格式”问题,

不知道怎么改,还望大师给予指点,谢谢.

是windows10的原生安装吗?还是docker安装?如果是docker安装,可以把宿主机的时区映射到容器内

odoo的容器建议最好不改时间,odoo前端会自动把写数据库的时间+8小时,如果我们系统时间是CST,再加8小时就会超前了。所以系统时间仍然要用UTC,这样odoo前端才会是正常的CST时间,只是日志还是UTC,不知道有没有大佬可以有更好的方式。

是windows10的原生安装

odoo.conf 中加入

log_timezone = Asia/Shanghai

但实测没有起作用,

2026-01-13 03:36:57,061 3872 INFO odoo18 odoo.addons.base.models.ir_cron: Job ‘Base: Auto-vacuum internal data’ (1) processed 0 records, 0 records remaining
2026-01-13 03:36:57,065 3872 INFO odoo18 odoo.addons.base.models.ir_cron: Job ‘Base: Auto-vacuum internal data’ (1) completed

期待其它大佬的方法

我是这样改的。有没有更好的方法?

这样改 不太符合要求 :rofl: ,一般要继承过来再修改。

是的,不太符合要求。