一、来龙去脉
先通过命令:docker run -d --name="tomcat-test1" -p 9911:8080 tomcat 创建并启动一个tomcat容器。
二、追根溯源
通过命令:docker logs --tail="100" tomcat-test1 查看tomcat容器的日志信息,发现时间与当前时间不一致,相差8个小时;
进入容器验证时区,执行命令:docker exec -it tomcat-test1 /bin/bash 进入容器,在容器内执行 date命令结果如下:
通过容器内和宿主机的时区查看结果对比发现,容器内默认使用了标准时区,宿主机使用的是东八区时间。为了使容器内的时区与宿主机的保持一致,考虑将宿主机的时区相关的配置文件映射到容器中,宿主机的时区配置文件位于/etc/localtime。
重新创建并运行一个tomcat容器,并将宿主机的时区文件映射到容器中,docker run -d --name="tomcat-test2" -p 9912:8080 -v /etc/localtime:/etc/localtime tomcat。
进入新的容器内查看当前时间,发现新的容器内的时区已经和宿主机的时区一致了,结果如下图所示:
退出容器,查看tomcat打印的日志信息,发现tomcat的打印的日志信息的时间仍然还存在时差。经研究发现,tomcat中jdk默认使用的时间文件为/etc/timezone,查看容器内的该文件,发现容器默认使用的是Etc/UTC时区,所以,修改时区文件/etc/timezone,将上海的时区写入文件中,命令:echo "Asia/Shanghai" > /etc/timezone
重启容器,并查看日志信
发现修改完之后重启,日志信息与当前系统时间一致。
三、皆大欢喜
至此,tomcat容器内时间不一致的问题得以解决。