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

SpringBoot+MySQL通过docker-compose部署:数据库连接失败排查

SpringBoot商品微服务Docker部署数据库连接错误排查方案

核心排查方向

以下是针对Docker部署场景下数据库连接失败的逐一排查步骤:

1. 修正数据库连接地址的Host配置

Docker容器之间通过服务名称通信,不能用localhost作为数据库Host。

  • 打开application.properties,确认数据库URL的Host是docker-compose.yml中MySQL服务的名称:
    # 错误示例:使用localhost(仅本地运行有效)
    # spring.datasource.url=jdbc:mysql://localhost:3306/product_db?useSSL=false&serverTimezone=UTC
    # 正确示例:使用docker-compose中MySQL的service名称(比如mysql)
    spring.datasource.url=jdbc:mysql://mysql:3306/product_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    

2. 确保数据库与应用的配置参数完全匹配

核对application.properties和docker-compose.yml中的以下参数:

  • 数据库名称:spring.datasource.url中的库名 ↔ docker-compose.yml中MYSQL_DATABASE的值
  • 用户名:spring.datasource.username ↔ docker-compose.yml中MYSQL_USER的值
  • 密码:spring.datasource.password ↔ docker-compose.yml中MYSQL_PASSWORD的值

3. 添加数据库健康检查,避免应用提前启动

MySQL容器启动后需要时间完成初始化,直接启动SpringBoot应用会导致连接失败。在docker-compose.yml中配置健康检查,让应用等待数据库就绪:

services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: product_db
      MYSQL_USER: product_user
      MYSQL_PASSWORD: product_pass
      MYSQL_ROOT_PASSWORD: root_pass
    # 添加健康检查
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
      interval: 5s
      timeout: 5s
      retries: 10
  product-service:
    build: .
    # 依赖数据库健康检查通过后再启动
    depends_on:
      mysql:
        condition: service_healthy
    ports:
      - "8080:8080"

4. 验证Dockerfile的打包逻辑

确保Dockerfile正确复制了Maven打包后的JAR包:

FROM openjdk:17-jdk-slim
WORKDIR /app
# 注意:此处JAR包名称要与pom.xml中构建的名称一致
COPY target/product-service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

执行mvn clean package确认target目录下生成了正确的JAR包,再执行docker-compose up --build。

5. 核对MySQL驱动与镜像版本兼容性

如果使用MySQL 8.0+镜像,pom.xml中必须使用对应版本的驱动:

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

避免因驱动版本过低导致的连接协议不兼容问题。

6. 根据报错信息精准定位

  • Connection refused:优先检查Host配置、MySQL容器是否正常启动、端口映射是否正确
  • Access denied for user:核对用户名、密码、数据库权限配置
  • Unknown database:确认MYSQL_DATABASE是否正确,MySQL容器启动时是否自动创建了该库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:13:03