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

Spring Boot+Docker Compose连接MySQL遇Connection refused问题求助

Docker Compose下Spring Boot连接MySQL出现Connection refused的解决方法

核心问题分析

  • 容器环境里的localhost指的是容器自身,而非宿主机或MySQL容器,Spring Boot用localhost:3306根本找不到MySQL服务
  • depends_on只保证容器启动顺序,不确保MySQL完成初始化就能接受连接
  • MySQL 5.7搭配MySQL8Dialect存在版本不匹配问题,可能引发额外连接异常

具体修改方案

1. 修正application.properties的数据库配置

把连接地址里的localhost替换为Docker Compose中MySQL的服务名mysqldb,同时调整方言、添加连接重试和超时配置:

spring.datasource.url=jdbc:mysql://mysqldb:3306/db_example?useSSL=false&allowPublicKeyRetrieval=true&connectTimeout=10000&socketTimeout=30000
spring.datasource.username=root
spring.datasource.password=mypass

# 适配MySQL 5.7的Hibernate方言
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect

# 连接池优化,提升稳定性
spring.datasource.hikari.maximum-pool-size=5
spring.datasource.hikari.connection-timeout=20000

2. 调整docker-compose.yml配置

  • 移除MySQL容器的hostname: localhost,Docker Compose会自动用服务名作为容器主机名
  • 添加健康检查,确保MySQL完全就绪后再启动Spring Boot
  • 可选:映射MySQL端口方便本地调试
version: "3"
    
services:
  springboot-app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      mysqldb:
        condition: service_healthy  # 等待MySQL健康检查通过才启动应用
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysqldb:3306/db_example?useSSL=false&allowPublicKeyRetrieval=true
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=mypass
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update
      - SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.MySQL57Dialect
  mysqldb:
    platform: linux/x86_64
    image: mysql:5.7
    ports:
      - "3306:3306"  # 可选,本地可直接连接调试
    environment:
      MYSQL_DATABASE: db_example
      MYSQL_ROOT_PASSWORD: mypass
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 5s
      timeout: 5s
      retries: 5

3. 优化Dockerfile(可选)

用多阶段构建减小镜像体积,提升构建效率:

# 构建阶段:编译打包应用
FROM maven:3.6.3-openjdk-11-slim AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline  # 提前下载依赖,避免重复下载
COPY src ./src
RUN mvn clean package -DskipTests

# 运行阶段:只保留运行所需的JRE和打包好的jar
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=builder /app/target/app.jar .
CMD ["java", "-jar", "app.jar"]

验证操作

  1. 清理旧容器和数据卷:docker-compose down -v
  2. 重新构建并启动服务:docker-compose up --build
  3. 查看应用日志确认连接状态:docker-compose logs -f springboot-app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:02:10