如何以最通用且与发行版无关的方式设置本地时间/时区?

如何以最通用且与发行版无关的方式设置本地时间/时区?

我创建了一个 Docker 容器,但它在错误的时区运行。我个人需要它在我的时区(欧洲/斯德哥尔摩,GMT+1)运行。由于该项目是开源的,其他用户可能也希望更改这一点。我希望任何人都可以轻松地在 Dockerfile 或 docker-compose.yml 中更改这一点。

如果可能的话,我还希望该解决方案不仅适用于 CentOS,以防有人希望使用其他发行版。

在我的docker容器中设置本地时间/时区的最与发行版无关的方法是什么?


这两种方法似乎很常见,但我不确定它们是否真的是最适合我的方法:

TZ 环境变量

一些 Linux 发行版会读取 TZ 环境变量。但是,我注意到当我使用图像时它不起作用centos:7

/etc/本地时间

您可以在 docker-compose.yml 中将容器映射/etc/localtime/etc/localtime主机上。但是,这样做时,使用的发行版/etc/timezone将保留在 UTC,而读取该时间的软件可能会读取错误的时区。

答案1

发行版无关者需要一个脚本来检测正在使用哪个发行版。这是因为每个发行版“系列”都有不同的时区标注方式。对于某些发行版,将以下内容添加到 Dockerfile 可能会有效:

运行 echo“欧洲/斯德哥尔摩”> /etc/timezone

其他(例如 Debian)需要使用上述命令,然后使用另一个 Dockerfile 命令,例如:

运行运行 sudo dpkg-reconfigure -f noninteractive tzdata

其他发行版(IIRC,包括 CentOS)可能需要类似以下内容:

运行 ln -s /usr/share/zoneinfo/Europe/Stockhom /etc/localtime

要使其与发行版无关,需要研究每个发行版重新配置时区的方法。如果您查看 /etc/localtime,您会注意到它不是一个文本文件。

相关内容