如何更改 Alpine 类型的 Docker 容器的时区设置
问题/现象
最近在公司的CI/DI服务器上尝试使用 drone 的 cron 来配置自动构建测试功能。然而发现配置的 cron表达是总是少了8个小时,于是猜测应该是时区设置的问题。 drone 这个 docker 镜像使用的是 alpine linux。
解决问题
由于docker所属宿主服务器是使用了时间服务器的,因此我希望docker容器的配置与宿主机一致即可。
- 首先需要宿主机本身已经安装好了 tzdata
- 在你的docker-compose.yml中加入相应的配置
environment:
TZ: "Asia/Shanghai"
volumes:
- /etc/hosts:/etc/hosts
- /etc/localtime:/etc/localtime
- /usr/share/zoneinfo:/usr/share/zoneinfo
在原来的 compose 文件中,我只是增加了 /etc/localtime:/etc/localtime
而没有增加 /usr/share/zoneinfo:/usr/share/zoneinfo
的映射,
详见前文 使用 drone 替代 gitlab action 搭建自动化集成环境
故而实际上是一直未生效的。
这个问题出现的根本原因是使用alpine作为系统的docker镜像默认是没有安装tzdata
的,故而其默认的是UTC时间。
如果是你自己制作alpine镜像的话,则最好安装好 tzdata ,免得麻烦。