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

Spring Boot应用Docker化时关闭MySQL出现数据库连接错误

问题分析与解决方案

问题根源

你的Spring Boot应用(含测试代码)的数据库连接配置指向了本地主机(localhost/127.0.0.1),而非Docker Compose网络内的MySQL服务容器。当本地MySQL运行时,应用能正常建立连接;关闭本地MySQL后,因找不到可用数据库节点,触发Hikari连接池初始化失败的CommunicationsException,导致测试环节无法完成。


解决方案

1. 修正数据库连接配置

修改项目中application.properties或application.yml的数据库URL,将localhost替换为Docker Compose中MySQL服务的名称(比如你的docker-compose.yml里MySQL服务名设为mysql,就写mysql)。

示例(application.properties):

spring.datasource.url=jdbc:mysql://mysql:3306/your_db_name?useSSL=false&serverTimezone=UTC
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}

示例(application.yml):

spring:
  datasource:
    url: jdbc:mysql://mysql:3306/your_db_name?useSSL=false&serverTimezone=UTC
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}

2. 确保Docker Compose配置合规

你的docker-compose.yml需要满足以下要求:

  • 定义MySQL服务并配置对应环境变量(匹配.env中的参数)
  • 让Spring Boot服务与MySQL服务处于同一Docker网络(默认compose会自动创建共享网络,只要服务在同一文件内即自动加入)
  • 配置启动依赖,确保MySQL先启动;若要保证MySQL完全就绪,可添加健康检查

示例docker-compose.yml片段:

version: '3.8'
services:
  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USERNAME}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "${DB_USERNAME}", "-p${DB_PASSWORD}"]
      interval: 5s
      timeout: 5s
      retries: 5
  app:
    build: .
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/${DB_NAME}?useSSL=false&serverTimezone=UTC
      SPRING_DATASOURCE_USERNAME: ${DB_USERNAME}
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
    ports:
      - "8080:8080"
    depends_on:
      mysql:
        condition: service_healthy
volumes:
  mysql_data:

3. 调整测试阶段连接配置

若测试代码仍指向本地MySQL,需在src/test/resources下创建application-test.properties/application-test.yml,将测试环境的数据库URL同样指向Docker Compose的MySQL服务名。

如果暂时不需要运行测试验证,可先跳过测试构建:

./mvnw clean package -DskipTests && docker-compose build && docker-compose up

内容的提问来源于stack exchange,提问作者Taha Furkan Ünsal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:00:47