问题描述
最近在 Docker 中修改时区遇到了一个问题,就是 python3 启动 apscheduler 时会通过接口去拿系统时区,而我之前 Docker 中的时区是这么改的:
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
然后报错这样:
tzlocal.utils.ZoneInfoNotFoundError: 'Multiple conflicting time zone
configurations found:\n/etc/timezone:Asia/Shanghai\n/etc/localtime is
a symlink to: ICT\nFix the configuration, or set the time zone in a TZ
environment variable.\n'
解决方案
大概意思是目标的时区配置文件和 /etc/timezone 中的时区名冲突,代码试图去拿 /etc/localtime 软链接指向的文件,而因为我是通过拷贝将 Asia/Shanghai 拷贝到 /etc/localtime,而该文件软链接指向的文件是 UCT,所以导致的错误。正确操作是使用软链接将 /usr/share/zoneinfo/Asia/Shanghai
软链接到 /etc/localtime
。
因此需要把拷贝操作改为:
RUN rm -f /etc/localtime
RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
(本文完)