背景:某个编译任务需要用UTC8时区,基于centos7 centos8 等操作系统的dockerfile默认是UTC0
什么是UTC CST
UTC 世界协调时间 UTC+0
CST 中国标准时间 UTC+8
通过date命令验证时间是UTC还是CST
liunx中时区相关文件 变量
TZ 变量
TZ可以设置时区,通过TZ设置的时区可以直接通过ENV查到
tzselect
TZ=Asia/Shanghai
/etc/timezone 本机所属时区,默认不存在,可以自行创建
echo 'Asia/Shanghai' >/etc/timezone
/etc/localtime localtime 是被ln的一个文件,链接到所有时区相关文件(ztfile),里面存放了不同的时区二进制文件
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/etc/profie 文件配置了全局变量,对所有用户生效,会在用户登录时读取该文件
/etc/bashrc shell执行bash时,会读取该文件
在dockerfile中直接把时区设置写入profile或bashrc中,可以设置成功,但无法通过ENV查看。同时,如果用户在容器中修改了TZ变量,但localtime的指向不会被修改,不一致可能会导致未知的错误。所以在dockerfile的制作中,不建议把时区写在profile或bashrc中。
如果在linux中修改,需要source
echo TZ=‘Asia/Shanghai'; export TZ >> /etc/profile
打开新的bash会因为启动方式不同而加载不同的文件,所以最好的方式是直接在TZ变量中配置TZ值shell不同启动方式参考 :
bash的四种登录方式及配置的环境变量_清屿yu的博客-优快云博客
tzdata
Time Zone Database,简称tz或tzinfo,是一组表示地球上各地的时间历史的代码和数据,目前由IANA维护。
ubuntu中默认安装了tzdata的工具包,可以单独进行配置参数
dpkg-reconfigure tzdata
但其他系统类似于centos7 8 就需要单独安装
yum install tzdata
dnf install tzdata
结论: 在dockerfile中通过TZ 变量配置需要的时区;
不要去动profile bashrc等文件,避免因为bash登录方式不同导致变量未生效;
也不要修改localtime文件,避免用户修改时区后导致未知异常