问题
今天docker内安装了tomcat,然后部署了项目。项目存在一些列表页面,查看列表时发现显示的时间和数据库里的时间相差八个小时。第一反应是数据库连接时区没有指定,查看了配置文件发现是配置了"serverTimezone=Asia/Shanghai"时区的,然后感觉涉及到了知识盲区。上网搜了一下类型的问题,好多人都说是数据库里面的时区没有配对,然后搞了半天数据库里面时区已经改对了,但是页面显示的时间还是依旧和之前的相差八个小时。于是突发奇想,是不是因为tomcat里的时区不对?然后自己手动找了下,解决了此问题,再次做以记录。
1.修改tomcat文件
修改容器内 /usr/local/tomcat/bin/catalina.sh文件。
因为容器内不能用vim指令,所以我将文件复制到容器外,然后修改后再复制到容器内部。
docker cp containerName : /usr/local/tomcat/bin/catalina.sh ./catalina.sh
为了防止意外 先复制一份未修改过的配置文件
cp catalina.sh catalina1.sh
编辑catalina.sh,找到下面这一行
再webresources后面添加上
-Duser.timezone=GMT+08
保存文件退出,然后将文件复制进容器中。
docker cp ./catalina.sh containerName : /usr/local/tomcat/bin/catalina.sh
重启tomcat 发现页面显示的时间已和数据库中一直。
2.修改容器内时区
因为我在代码中还会调用服务器本地的时间,也就是会获取容器内的时间。可以进入容器内查看当前时间,发现还是和实际时间相差八个小时,也就是容器内的时间默认是CST标准时间。所以要对容器内部时间做一个调整。
1.查看容器内部时间。
date -R
2.修改当前容器时区
cd etc
mv localtime localtime_bak
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
3.做完上面三个操作,再使用date -R命令,发现时区已经做了修改,容器内部时间和北京时间一致。
问题得以解决,再次做以记录。