Spring Boot+MySQL应用Docker化部署报错:数据库连接失败
问题排查与解决方案
根据你提供的配置和错误信息,核心问题是Spring Boot容器无法连接到MySQL容器,以下是几个关键问题点及修复方案:
1. depends_on 不等待数据库完全就绪
Docker Compose的depends_on仅保证app容器在mysqldb之后启动,但MySQL容器启动后需要10-30秒完成数据库初始化、权限配置等流程,此时Spring Boot尝试连接必然失败。
修复方案:
- 添加连接重试机制(推荐):在Spring Boot配置中增加连接池重试参数,让HikariCP自动重试连接:
在application.properties或SPRING_APPLICATION_JSON中添加:spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.maximum-pool-size=5 spring.datasource.hikari.validation-timeout=5000 spring.datasource.hikari.connection-test-query=SELECT 1 spring.datasource.hikari.test-on-borrow=true - 使用等待脚本:在Dockerfile中引入
wait-for-it.sh脚本,等待MySQL端口就绪后再启动Spring Boot:
下载脚本到项目根目录,修改Dockerfile:FROM maven:3.8.5-openjdk-17 WORKDIR /app COPY . . RUN mvn clean install -DskipTests COPY wait-for-it.sh . RUN chmod +x wait-for-it.sh CMD ["./wait-for-it.sh", "mysqldb:3306", "--", "mvn", "spring-boot:run"]
2. Dockerfile的WORKDIR路径错误
你的Dockerfile中WORKDIR ../Task_adc_docker是无效的,镜像内的工作目录不能用相对上级路径,会导致后续COPY和mvn命令找不到文件。
修复方案:修改为镜像内的绝对路径:
FROM maven:3.8.5-openjdk-17 WORKDIR /app COPY . . RUN mvn clean install -DskipTests CMD ["mvn", "spring-boot:run"]
(添加-DskipTests避免构建阶段测试连接数据库失败)
3. MySQL 5.7与JDBC驱动的兼容性问题
你使用的com.mysql.cj.jdbc.Driver是MySQL 8.0+的驱动类,虽然兼容5.7,但需要额外配置参数,且驱动版本不匹配可能导致连接失败。
修复方案:
- 切换为MySQL 5.7对应的驱动类:在配置中将
spring.datasource.driver-class-name改为com.mysql.jdbc.Driver - 更新pom.xml中的驱动版本(适配5.7):
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> - 在JDBC URL中添加
allowPublicKeyRetrieval=true参数,解决驱动连接5.7时的权限问题:"jdbc:mysql://mysqldb:3306/task_adc?useSSL=false&allowPublicKeyRetrieval=true"
4. 环境变量解析验证
检查SPRING_APPLICATION_JSON中的环境变量是否正确替换:
docker-compose exec app env | grep SPRING_APPLICATION_JSON
如果变量未正确替换,确认.env文件与docker-compose.yml在同一目录,或者显式指定env_file路径:
env_file: ./path/to/.env
额外检查步骤
- 查看MySQL容器日志,确认初始化完成:
找到docker-compose logs mysqldbready for connections日志,表示MySQL已就绪。 - 验证app容器与mysqldb的网络连通性:
能ping通则网络正常。docker-compose exec app ping mysqldb
内容的提问来源于stack exchange,提问作者user3118887
相关产品推荐
相关产品推荐

