【问题标题】:/etc/timezone does not exist on anapsix/alpine-java:8_server-jre docker image/etc/timezone 在 anapsix/alpine-java:8_server-jre docker 映像上不存在
【发布时间】:2019-11-29 10:26:55
【问题描述】:

我想知道,在 anapsix/alpine-java:8_server-jre 映像上运行的 docker 容器上的时区。但我找不到 /etc/timezone - 它不存在。如果我打开 ect/localtime 它会显示我:

TZif2UTCTZif2�UTC UTC0

这是否意味着我的 docker 默认时区是 UTC?

我用 docker-compose 启动容器。我没有修改任何东西。

【问题讨论】:

    标签: java docker java-8 docker-compose


    【解决方案1】:

    您需要先在图像上安装tzdata,因为它不存在:

    apk add --no-cache tzdata
    

    检查时区:​​

    cat /etc/localtime
    

    将区域复制到本地时间:

    cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime
    

    设置您的新时区:

    echo "Europe/Berlin" >  /etc/timezone
    

    是的,您的时间在当前图像中是 UTC

    【讨论】:

      【解决方案2】:

      Answer by LinPy 对于您问题的 Linux 部分可能是正确的。但您也为 Java 标记了您的问题。

      Java 有 tzdata

      Java 有自己的时区数据库副本tzdata。您的主机 OS 中的任何时区数据库在 JVM 中都无关紧要。

      如果您感兴趣的时区规则发生变化,请确保至少在三个位置更新 tzdata

      • 操作系统(Linux、BSD、macOS 等)
      • Java 平台
      • 数据库系统(Postgres 等)

      Java 的频繁更新将包括最近的tzdata。不幸的是,政客们一直在通过littleno 预警来改变他们管辖范围内的时区。在这种情况下,您可能需要manually install 一个新的tzdata

      要在UTC 中捕捉当前时刻,请致电Instant.now

      Instant instant = Instant.now() ;  // Capture current moment in UTC (an offset of zero hours-minutes-seconds). 
      

      调整到时区。

      ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
      ZonedDateTime zdt = instant.atZone( z  ;
      

      【讨论】:

      • 虽然 Java 有自己的 tzdata,但 openjdk 仍然解析 /etc/timezone 以确定默认时区,如果不存在则默认为 GTM(而不是 UTC)。
      猜你喜欢
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2017-11-30
      • 2018-10-02
      • 1970-01-01
      相关资源
      最近更新 更多