为了保证容器时区和系统时区相同,需要挂载docker的/etc/localtime到系统的/etc/localtime。
修改docker-compose.yml:
volumes:
- /etc/localtime:/etc/localtime
JAVA应用,查询log日志发现,居然日志时间也是相差了8个小时。冷静之后分析应该是JVM的时区不对。
解决办法:
1.、JVM是通过/etc/timezone文件获取时区的,需要在容器中映射或者写入时区文件
RUN echo "Asia/Shanghai" >> /etc/timezone
2、docker容器中运行的java应用打出的日志时间和通过date -R方式获取的容器标准时间有八个小时时间差。 java应用和容器时间不一致,相差8个小时。这时需要大家进入容器修改tomcat目录下的 lib/catalina 文件找到 JAVA_OPTS,增加下面设置:
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 作者:张尚