我创建了一个 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,您会注意到它不是一个文本文件。