在docker上连接mysql报错:The last packet sent successfully to the server was 0 milliseconds ago

环境

先说一下我的情况:
mysql 数据库版本:5.7
JDBC驱动版本:8.0
然后我是在docker运行的mysql和应用程序(配置了hosts的解析,同时配置了相同的networks)。但由于其他原因,本地的mysql占用了3306端口,所以在docker中运行的mysql使用的是3307端口(将3307映射到3306),在开发时,应用程序连接mysql(3307端口)是没有问题的,但将应用程序也打包到docker部署时,就会出问题了,出现了下面的报错信息。
从这也可以看出,这个不是兼容问题,8.0的驱动是可以连接5.7的数据库的,更加具体的说明可以参考mysql官方文档:
在docker上连接mysql报错:The last packet sent successfully to the server was 0 milliseconds ago_第1张图片

报错

下面是我的报错信息:

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:59)
 at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:103)
 at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:149)
 at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:165)
 at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:355)
 at com.mysql.cj.protocol.a.NativeAuthenticationProvider.negotiateSSLConnection(NativeAuthenticationProvider.java:789)
 at com.mysql.cj.protocol.a.NativeAuthenticationProvider.proceedHandshakeWithPluggableAuthentication(NativeAuthenticationProvider.java:499)
 at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:217)
 at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1411)
 at com.mysql.cj.NativeSession.connect(NativeSession.java:165)
 at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:982)
 at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:852)
 ... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

解决办法

从这上面的报错信息看,基本没有什么有用的参考信息,在网上找了不少资料,但跟我的情况都不符合,也没有用,后来我将本地的mysql关了,然后将docker的mysql端口改为(3306:3306),发现数据库连接正常,这下我就知道问题所在,在docker上运行的程序,连接数据库时,并没有走mysql的对外端口3307,而是直接访问的3306,但在应用程序上访问的是3307,所以导致报错,解决办法是:在docker上的应用程序直接使用3306端口就可以了

你可能感兴趣的:(小问题,docker,mysql)