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

Docker部署Spring Boot连接MySQL遇CommunicationsException连接失败

解决Maven打包测试阶段MySQL连接失败问题

核心问题分析

  • Maven执行mvn clean package时默认会运行单元测试,此时你的Docker Compose服务(包括MySQL容器)还未启动,配置mysqldb:3306根本无法被本地环境解析;
  • 即使本地MySQL正常,用localhost:3306也可能因为测试配置未正确生效、MySQL权限限制(比如账号仅允许特定IP访问),或者单元测试本身就不该依赖真实数据库的设计原则导致问题。

快速解决方案

方案1:跳过测试阶段打包

如果只是想快速完成镜像构建,直接跳过测试环节:

# 跳过测试执行但保留测试代码编译
mvn clean package -DskipTests

# 完全跳过测试相关的编译和执行
mvn clean package -Dmaven.test.skip=true

方案2:配置测试专用内存数据库(推荐)

单元测试应该使用轻量的内存数据库(比如H2),避免依赖外部服务:

  1. 在pom.xml中添加H2依赖(仅测试环境生效):
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>test</scope>
</dependency>
  1. 在src/test/resources下创建application-test.yml配置文件:
spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
    driver-class-name: org.h2.Driver
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop
    show-sql: true
  1. 在测试类上指定激活测试配置:
@SpringBootTest
@ActiveProfiles("test")
public class YourApplicationTests {
    // 测试代码
}

后续Docker Compose部署注意事项

当镜像构建完成后,通过Docker Compose启动服务时,Spring Boot应用容器内的spring.datasource.url配置为jdbc:mysql://mysqldb:3306/your_db_name是正确的——因为Docker Compose会为服务创建专属网络,服务名mysqldb可以直接解析到MySQL容器的IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:05:03