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

使用Docker Compose部署Spring Boot与MySQL时应用连接数据库失败如何解决

问题排查与解决方案

核心原因与对应修复方案

  • MySQL进程未完全就绪,应用启动过早
    depends_on仅保证容器的启动先后顺序,不会等待MySQL内部的库初始化、权限配置等操作完成就会启动应用容器,此时MySQL还未对外提供正常的数据库服务,导致连接失败。
    解决方案:
    1. 临时验证可以在应用的启动逻辑前增加等待时间,在docker-compose的reminder-docker-container配置段增加如下配置:
    command: ["sh", "-c", "sleep 15 && java -jar /你的应用jar包名称.jar"]
    
    1. 生产环境建议增加端口检测逻辑,使用wait-for-it等工具检测MySQL 3306端口就绪后再启动应用,同时可以配置Hikari连接池的重试参数,在应用的环境变量中增加:
    - spring.datasource.hikari.initialization-fail-timeout=-1
    - spring.datasource.hikari.connection-timeout=30000
    
  • 应用未配置数据库鉴权信息
    你当前的docker-compose配置中,应用容器仅配置了数据库连接URL,未配置对应的用户名和密码参数,Spring Boot无法通过鉴权连接数据库。
    解决方案:在reminder-docker-container的environment段补充如下配置:
- spring.datasource.username=quartz
- spring.datasource.password=quartz
  • JDBC连接参数缺失/不兼容高版本MySQL
    你使用的mysql:latest镜像为8.x版本,需要补充时区、公钥获取等参数,否则会出现连接异常。
    解决方案:修改JDBC连接URL为如下内容:
jdbc:mysql://mysql-docker-container:3306/quartz?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
  • MySQL默认认证插件和JDBC驱动版本不兼容
    MySQL 8.x默认使用caching_sha2_password认证插件,如果你的应用中使用的MySQL JDBC驱动版本低于5.1.46,会不支持该认证方式导致连接失败。
    解决方案:
    1. 优先升级应用内的MySQL JDBC驱动到8.x版本,和数据库版本保持一致
    2. 也可以修改MySQL配置,强制使用旧版认证插件,在mysql-docker-container配置段增加:
    command: --default-authentication-plugin=mysql_native_password
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:06:03