一般我们在使用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 默认就用本地时间,再写死反而容易冲突。
重启容器,可以看到日志已经变为宿主机的时间和时区了。
