docker 时区

docker 8 小时

建立docker 经常会出现 docker 日志的时间和正常时间相差 8小时 通过date -R 查看时区也没有问题

  • 这是因为 date 指令对应的是 /etc/localtime
  • 时区的修改要通过设置 /etc/timezone 否则调整了时间格式,本机所属的时区仍保持不变.

    /etc/localtime和/etc/timezone 区别

  • /etc/localtime是用来描述本机时间,
  • /etc/timezone是用来描述本机所属的时区
  • 调整了时间格式,本机所属的时区仍保持不变.
  • 在linux中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等计算出当前的时间。
    比如jdk应用,时区为“Etc/UTC”,本机时间改为北京时间,通过java代码中new 出来的时间还是utc时间,所以必须得修正本机的时区。

    读取时区的步骤

    参考
    tz = getPlatformTimeZoneID(),这个函数内容,就不贴了,可以自己看下,总计起来,在Linux系统上,大概过程为以下几步:

1.先找“TZ”变量,没有,到2,

2.读/etc/timezone,没有到3,

3.比较/etc/localtime文件与”/usr/share/zoneinfo目录下所有时区文件,如果有一致的,就为该时区,如果没有,到4,

4.默认为标准GMT

时区修改

方法
  1. java -jar -Duser.timezone=GMT+08 xxx.jar
  2. System.setProperty(“user.timezone”,”GMT +08”);
    结果
    1
    2
    3
    4
    // java.util.TimeZone#setDefaultZone

    String zoneID = AccessController.doPrivileged(new GetPropertyAction("user.timezone"));
    // 该地方可以获取到修改的时区

    修改docker 时区

  • 方法一
    终端执行 date命令,查看宿主服务器的时区是否正确
    如果正确: 执行 docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime 将本地时间拷贝到docker内部 docker cp /usr/share/zoneinfo/Asia/Shanghai poetry:/etc/localtime
  • 方法二
    如果宿主服务器时间本身有问题,可以直接修改宿主机时间,然后执行法一
    也可以直接修改docker内部时区,执行命令:
    CentOS
    echo “Asia/shanghai” > /etc/timezone;
    Ubuntu
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 方法三
    创建时修改
    增加映射使用主机时区
  • v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
  • /etc/timeone和/etc/localtime区别
作者

lizhongyuan3

发布于

2022-06-21

更新于

2022-09-05

许可协议

评论