2023-10-13 13:37:29 +08:00
|
|
|
|
# 解决容器内时区不一致问题
|
|
|
|
|
|
|
|
|
|
## 背景
|
|
|
|
|
|
|
|
|
|
业务程序在使用时间的时候(比如打印日志),没有指定时区,使用的系统默认时区,而基础镜像一般默认使用 UTC 时间,程序输出时间戳的时候,就与国内的时间相差 8 小时,如何使用国内的时间呢?本文教你如何解决。
|
|
|
|
|
|
2024-04-23 15:18:07 +08:00
|
|
|
|
## 方案一:指定 TZ 环境变量
|
|
|
|
|
|
|
|
|
|
很多编程语言都支持 `TZ` 这个用于设置时区的环境变量,可以在部署工作负载的时候,为容器指定该环境变量,示例:
|
|
|
|
|
|
2024-04-23 15:47:13 +08:00
|
|
|
|
<FileBlock showFileNumbers file="containerization/tz-env.yaml" />
|
2024-04-23 15:18:07 +08:00
|
|
|
|
|
2024-04-23 15:44:43 +08:00
|
|
|
|
## 方案二:Dockerfile 里设置时区
|
2023-10-13 13:37:29 +08:00
|
|
|
|
|
2024-04-23 15:44:43 +08:00
|
|
|
|
下面给出在一些常见的基础镜像里设置时区的实例:
|
2023-10-13 13:37:29 +08:00
|
|
|
|
|
2024-04-23 15:44:43 +08:00
|
|
|
|
<Tabs>
|
|
|
|
|
<TabItem value="ubuntu" label="Ubuntu">
|
|
|
|
|
<FileBlock file="containerization/ubuntu-tz.dockerfile" />
|
|
|
|
|
</TabItem>
|
|
|
|
|
<TabItem value="alpine" label="Alpine">
|
|
|
|
|
<FileBlock file="containerization/alpine-tz.dockerfile" />
|
|
|
|
|
</TabItem>
|
2024-04-23 15:50:13 +08:00
|
|
|
|
<TabItem value="centos" label="CentOS">
|
|
|
|
|
<FileBlock file="containerization/centos-tz.dockerfile" />
|
|
|
|
|
</TabItem>
|
2024-04-23 15:44:43 +08:00
|
|
|
|
</Tabs>
|
2024-04-23 15:18:07 +08:00
|
|
|
|
|
|
|
|
|
## 方案三:挂载主机时区配置到容器(不推荐)
|
|
|
|
|
|
2024-04-23 15:52:30 +08:00
|
|
|
|
最后一种思路是将 Pod 所在节点的时区文件挂载到容器内 `/etc/localtime`,这种方式对 Pod 有一定侵入性,而且依赖主机内时区配置,在不得已的情况下不推荐使用。
|
|
|
|
|
|
|
|
|
|
下面是 YAML 示例:
|
|
|
|
|
|
2024-04-23 15:47:13 +08:00
|
|
|
|
<FileBlock showFileNumbers file="containerization/mount-tz.yaml" />
|