Docker容器环境下,JDBC连接oracle Connection reset异常

时间:2024-04-14 07:56:52

启动微服务,查看日志在初始化数据源卡死,过几分钟之后,报:

Caused by: java.sql.SQLRecoverableException: IO 错误: Connection reset

……

Caused by: java.net.SocketException: Connection reset

 

Docker容器环境下,JDBC连接oracle Connection reset异常

网上查找原因,给出的解决方法是,增加启动参数:

 -Djava.security.egd=file:/dev/urandom

查看了一下程序启动参数已经添加了。后来Dockerfile构建镜像时,将ENTRYPOINT的格式由exec格式换成了shell格式,其他各种参数不变。问题竟然解决了。其实,这两种方式应该没有差别才对啊。太诡异了。

ENTRYPOINT ["java","-Djava.awt.headless=true -XX:+UseConcMarkSweepGC -Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

修改为:

ENV JAVA_OPTS="-Djava.awt.headless=true -XX:+UseConcMarkSweepGC" 
ENTRYPOINT ["/bin/sh","-c","java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

启动容器之后,查看容器执行的命令:

exec格式:

java '-Djava.awt.headless=true -XX:+UseConcMarkSweepGC -Djava.security.egd=file:/dev/./urandom' -jar /app.jar

shell格式:

sh -c 'java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar'