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

Docker Compose部署Spring Boot连接MySQL失败求助

排查Docker Compose下Spring Boot无法连接MySQL的方案

1. 确认容器网络通信配置

  • Spring Boot配置文件中,数据库主机名必须使用Docker Compose中MySQL服务的服务名(比如mysql),不能用localhost或127.0.0.1——容器在同一自定义网络内通过服务名寻址,localhost指向容器自身,而非MySQL容器。
  • 测试连通性:执行docker exec -it <你的Spring Boot容器名> ping mysql,如果ping不通,检查docker-compose.yml是否为所有服务配置了同一网络(默认会创建一个默认网络,但若手动指定了网络需确保都在里面)。

2. 等待MySQL初始化完成再启动Spring Boot

MySQL容器启动后需要时间完成初始化(创建数据库、用户等),Spring Boot启动过快会导致连接失败:

  • 在docker-compose.yml中为Spring Boot服务添加健康检查依赖:
    services:
      spring-boot-app:
        # 其他配置
        depends_on:
          mysql:
            condition: service_healthy
      mysql:
        # 其他配置
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
          interval: 5s
          timeout: 5s
          retries: 5
    
  • 或在Spring Boot配置中添加连接重试机制:
    spring.datasource.hikari.connection-timeout=30000
    spring.datasource.hikari.maximum-pool-size=10
    spring.datasource.hikari.connection-test-query=SELECT 1
    

3. 核对数据库配置参数一致性

  • 确保Spring Boot配置中的数据库名、用户名、密码与docker-compose.yml中MySQL的环境变量完全匹配:
    • MySQL环境变量示例:
      mysql:
        environment:
          MYSQL_DATABASE: mydb
          MYSQL_USER: appuser
          MYSQL_PASSWORD: apppass
          MYSQL_ROOT_PASSWORD: rootpass
      
    • Spring Boot对应配置:
      spring.datasource.url=jdbc:mysql://mysql:3306/mydb?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
      spring.datasource.username=appuser
      spring.datasource.password=apppass
      
  • 注意:容器间通信使用MySQL容器内部端口(默认3306),无需使用主机映射的端口(比如33060)。

4. 验证JDBC驱动与MySQL版本兼容性

  • MySQL 8.x版本需使用mysql-connector-java:8.0.x驱动,且URL需添加serverTimezone参数;5.x版本用5.1.x驱动,无需该参数。
  • 若使用Spring Boot Starter,确保spring-boot-starter-data-jpa或spring-boot-starter-jdbc自动引入的驱动版本与MySQL匹配,也可手动指定:
    <!-- Maven示例 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>
    

5. 查看容器日志定位具体错误

  • 查看MySQL容器日志,确认初始化是否正常:docker logs <你的MySQL容器名>,检查是否有“Access denied”“database not found”等错误。
  • 查看Spring Boot容器日志,获取更详细的连接报错:docker logs <你的Spring Boot容器名>,比如是否是SSL配置问题、权限不足,还是DNS解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:32:17