容器时区与宿主机不一致的经典问题

奥黛丽·逐爱者
2025-11-06 / 0 评论 / 6 阅读 / 正在检测是否收录...

问题:

宿主机时间是 中国标准时间 CST(UTC+8),而容器里默认是 UTC 时间
Docker 容器默认使用 UTC 时区,除非你在镜像里或运行时显式指定了其他时区。
有的镜像里连 /etc/localtime 这个文件都不存在,所以单纯挂载宿主机的 /etc/localtime 进去不会生效

分析

一条规则打天下:“只挂 zoneinfo 目录,统一用 TZ 变量指向文件,绝不碰 /etc/localtime”
所有镜像(Alpine、Debian、BusyBox、RedHat)都认 TZ 变量, BusyBox 也认“文件路径”形式的 TZ,因此无需再 ln、无需改 /etc,也无需打新镜像。

解决方法

1、只挂一条只读卷,把宿主机整个 zoneinfo 目录挂到容器同名路径:
volumes:
  - /usr/share/zoneinfo:/usr/share/zoneinfo:ro
2、环境变量:
environment:
  - TZ=Asia/Shanghai

验证脚本(修改实际容器名)

for c in nginx tomcat9-jdk8 python-app; do
  echo === $c ===
  docker exec $c date +'%F %T %Z'
done

mhn4m4tu.png

0

评论 (0)

取消