为了保证容器时区和系统时区相同,需要挂载docker的/etc/localtime到系统的/etc/localtime。
修改docker-compose.yml:

  1. volumes:
  2. - /etc/localtime:/etc/localtime

JAVA应用,查询log日志发现,居然日志时间也是相差了8个小时。冷静之后分析应该是JVM的时区不对。

解决办法:

1.、JVM是通过/etc/timezone文件获取时区的,需要在容器中映射或者写入时区文件

  1. RUN echo "Asia/Shanghai" >> /etc/timezone

2、docker容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时时间差。 java应用和容器时间不一致,相差8个小时。这时需要大家进入容器修改tomcat目录下的 lib/catalina 文件找到 JAVA_OPTS,增加下面设置:

  1. JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"

在某些发行版的 Linux 系统(比如 CentOS)中,系统时区是由 /etc/localtime 文件控制的,所以可以通过修改 /etc/localtime 文件来修改系统时区。

在某些发行版的 Linux 系统(比如 Ubuntu)中,系统时区是由 /etc/timezone 文件控制的,所以可以通过修改 /etc/timezone 文件来修改系统时区。

文档更新时间: 2022-02-21 09:38   作者:张尚