docker - Quarkus Docker JVM SSL 问题

标签 docker ssl jvm quarkus

我有一个连接到 MySQL 数据库的 quarkus 应用程序。
我使用生成的 Dockerfile.jvm 来构建我的 docker 镜像。而且我在本地桌面上运行这个图像没有问题。
但是,当我想在我的 vm 上运行相同的图像时,我有以下堆栈跟踪:

Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure                                      
                                                                                                                                  
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.  
  at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)                                       
  at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)                           
  at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)                                                        
  at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456)                                                             
  at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246)                                                        
  at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197)                                                
  at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:200)                                                
  at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:419)                                             
  at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:401)                                             
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)                                                           
  at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:65)                               
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126)                                    
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)                                    
  at java.base/java.lang.Thread.run(Thread.java:834)                                                                              
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure                                         
                                                                                                                                  
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.  
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)                                     
  at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)              
  at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)      
  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)                                                    
  at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)                                           
  at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)                                          
  at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)                                          
  at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)                            
  at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:334)                                       
  at com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:164)                          
  at com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1342)                                                     
  at com.mysql.cj.NativeSession.connect(NativeSession.java:157)                                                                   
  at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:956)                                                  
  at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:826)                                                        
  ... 11 more                                                                                                                     
Caused by: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) 
  at java.base/sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171)                                                
  at java.base/sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98)                                     
  at java.base/sun.security.ssl.TransportContext.kickstart(TransportContext.java:222)                                             
  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:433)                                              
  at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:411)                                              
  at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:336)                                        
  at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188)                              
  at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99)                           
  at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:325)                                       
  ... 16 more                                                                                                                     
我不知道如何解决这个问题。任何帮助将不胜感激。

最佳答案

我通过以下内容替换原始 Dockerfile.jvm 内容解决了我的问题:

FROM openjdk:11-jdk-slim
COPY target/lib/* lib/
COPY target/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这可能会创建更重的图像,但至少这总是有效的。

关于docker - Quarkus Docker JVM SSL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64729717/

相关文章:

linux - 如何以不同的用户身份运行 docker login 命令?

java.net.SocketException : Connection reset 异常

ssl - 如何将 ssl 证书从一个域移动到另一个域?

python - 由于 ssl 错误,无法在 python 3.6 中 pip 安装包

java - Java虚拟机是否允许返回类型重载?

java - Jboss GC不释放内存

java - Keycloak docker 容器无法从卷导入领域

在没有 Shiny 服务器的 Docker 中运行 Shinyapp

java - 为什么以后取消对ParNew+SerialOld 和DefNew+CMS 的支持?

docker - 本地MQTT mosquitto实例获得连接ECONNREFUSED 127.0.0.1:1883