You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot容器化后无法连接Amazon RDS Aurora MySQL问题求解

问题根因

你配置的useSSL=false参数未实际生效,导致MySQL驱动仍尝试发起SSL连接,而Docker内置的OpenJDK 8镜像默认禁用了TLSv1、TLSv1.1等旧版协议,与Aurora MySQL的SSL协议版本不匹配,触发SSL握手失败。本地直接运行正常是因为本地运行环境的JDK安全配置、配置文件解析规则和容器内环境存在差异。

修复方案

1. 修正JDBC URL参数分隔符

application.properties文件中不需要对&做HTML转义,你当前写的&会导致useSSL=false参数无法被驱动识别,直接修改配置:

spring.datasource.url=jdbc:mysql://aws_rds:3306/service_db?serverTimeZone=UTC&useSSL=false

如果生产环境需要开启SSL保证安全,可以不用关闭SSL,额外新增指定TLS版本的参数即可:

spring.datasource.url=jdbc:mysql://aws_rds:3306/service_db?serverTimeZone=UTC&useSSL=true&enabledTLSProtocols=TLSv1.2

2. 调整容器内JDK安全配置(可选,开启SSL时需要)

如果你的Aurora MySQL实例仅支持旧版TLS协议,可以在Dockerfile中添加配置修改指令,放开JDK对旧TLS版本的禁用:

FROM openjdk:8
ARG app_name

ENV version /
ENV build /

# 新增这一行,移除TLSv1、TLSv1.1的禁用规则
RUN sed -i 's/jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1/jdk.tls.disabledAlgorithms=SSLv3/g' $JAVA_HOME/jre/lib/security/java.security

COPY ./target/${app_name}.jar ./app.jar
# 修正CMD的环境变量解析问题,使用sh执行才能识别${}占位符
CMD ["sh", "-c", "java -Dserver.port=80 -Dproject.version=${version} -Dbuild.number=${build} -jar ./app.jar"]

3. 修复Dockerfile环境变量解析问题

你当前使用的exec模式CMD不会触发shell解析,${version}和${build}占位符无法被替换为实际的环境变量值,按上面的Dockerfile示例修改为sh -c包裹的形式即可。

内容的提问来源于stack exchange,提问作者Tomash Gombosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 01:45:03