记一次Oracle的报错,报错信息:
java.sql.SQLException: ORA-00604: error occurred at recursive SQL level 1
ORA-01882: timezone region not found

当时我是把项目打包成了一个镜像部署的,然后在测试时出现了该报错。
直接百度,返现问题是Oracle的时区问题。

然后我容器停了,直接在服务器本机上运行,就没有报错了。

众所周知,Docker的容器其实就是一个微型的Linux,所以问题应该出在Docker上。

先查看服务器本机的时间:

[root@instance-tnpnvt5z ~]# date -R
Thu, 14 Oct 2021 10:11:27 +0800

时间没错。

再进入docker的容器里看时间:

[root@instance-tnpnvt5z ~]# docker exec -it cbbbf1cf4c15 /bin/bash
root@cbbbf1cf4c15:/# date -R
Thu, 14 Oct 2021 01:47:34 +0000

一看! 好家伙,这时间就有问题。

解决方案:
容器时间和宿主机同步

#在 run 时挂载宿主时间配置
-v /etc/localtime:/etc/localtime

然后重新再运行一次镜像,结果还有报错。

最后我又修改了Dockerfile的配置
在启动jar包时加了一个参数:-Duser.timezone=GMT+08

再一次重新打包,运行,测试,一切正常。没有再报错。

Logo

更多推荐