如何将宿主机的时区文件挂载到docker 容器里面?
对于时区的设置,对于应用程序在显示时间方面,至关重要,可是如何容器的镜像中,没有时区文件,该怎么解决?
其实,也非常的简单。
1、安装tzdata的软件包
2、将宿主机的时区文件挂载到容器中
今天,我们重点说说,第2点,怎么实现?
实现的方法非常的容易,在启动docker容器的时候,挂载时区文件、设置时区环境变量即可,我们来看下
- 默认的alpine镜像中,无时区设置,无时区安装文件,所以,默认的时区UTC
[root@nctest-snap-test-02 etc]# docker run -it --rm alpine:3.13 sh / # date Thu Jul 7 02:04:57 UTC 2022 / # ls -l /etc/localtime ls: /etc/localtime: No such file or directory / # cd /usr/share/zoneinfo sh: cd: can't cd to /usr/share/zoneinfo: No such file or directory / #
- 挂载时区文件,设置TZ变量后,设置了当前的时区CST
[root@nctest-snap-test-02 etc]# docker run -it --rm -e "TZ=Asia/Shanghai" -v /usr/share/zoneinfo:/usr/share/zoneinfo alpine:3.13 sh / # date Thu Jul 7 10:06:20 CST 2022 / # ls -l /etc/localtime ls: /etc/localtime: No such file or directory / # / # cd /usr/share/zoneinfo/ /usr/share/zoneinfo # ls Africa Asia CET Cuba Egypt GB GMT-0 Hongkong Israel Libya Mexico PRC Portugal Turkey Universal iso3166.tab right America Atlantic CST6CDT EET Eire GB-Eire GMT0 Iceland Jamaica MET NZ PST8PDT ROC UCT W-SU leapseconds tzdata.zi Antarctica Australia Canada EST Etc GMT Greenwich Indian Japan MST NZ-CHAT Pacific ROK US WET posix zone.tab Arctic Brazil Chile EST5EDT Europe GMT+0 HST Iran Kwajalein MST7MDT Navajo Poland Singapore UTC Zulu posixrules zone1970.tab /usr/share/zoneinfo #
- 有了时区安装文件后,通过TZ设置任何的已经包含的时区,就非常容易了。
[root@nctest-snap-test-02 etc]# docker run -it --rm -e "TZ=Indian/Antananarivo" -v /usr/share/zoneinfo:/usr/share/zoneinfo alpine:3.13 sh / # date Thu Jul 7 05:01:08 EAT 2022 / # exit
当然了,我们可以通过对alpine镜像改造,安装时区文件的,也是一种实现的手段,也会更加的便捷。