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

Docker-Compose部署SpringBoot连接MySQL失败求助

问题排查与解决方案

1. 数据库用户连接权限限制

MySQL 8.0默认创建的用户仅允许localhost连接,而Spring Boot应用运行在独立Docker容器中,通过db主机名发起连接属于远程访问场景,admin用户默认没有该权限,这是连接超时的核心原因之一。

解决方法:

  • 添加初始化授权脚本:在项目根目录创建init.sql文件,写入以下内容:
    GRANT ALL PRIVILEGES ON angelodaleoptdb.* TO 'admin'@'%';
    FLUSH PRIVILEGES;
    
    然后在docker-compose.yml的db服务中挂载该脚本:
    db:
      # ... 原有配置
      volumes:
        - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    
  • 修改健康检查命令:直接验证admin用户的连接权限,替换原有健康检查配置:
    healthcheck:
      test: ["CMD", "mysql", "-uadmin", "-proot", "-h", "localhost", "-e", "SELECT 1"]
      interval: 10s
      retries: 5
      timeout: 5s
    

2. 确认Spring Boot环境变量生效

虽然docker-compose.yml中配置了SPRING_DATASOURCE_*环境变量,但需确保Spring Boot正确加载并覆盖application.properties的默认配置。可以在应用启动日志中搜索DataSource关键字,确认实际使用的URL、用户名是否为jdbc:mysql://db:3306/angelodaleoptdb和admin。

若环境变量未生效,可在application.properties中添加占位符增强兼容性:

spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:mysql://localhost:3306/angelodaleoptdb?useSSL=false&serverTimezone=UTC}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:root}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:admin}

3. 调整连接池与数据库初始化配置

当前connectionTimeout设置为100秒过长,且MySQL容器启动后可能需要额外时间完成数据库初始化,可优化参数:

  • 将spring.datasource.hikari.connectionTimeout调整为30000ms(30秒)
  • 保留initializationFailTimeout=0,允许连接池初始化失败后自动重试

4. 验证容器网络连通性

手动进入Spring Boot容器测试与db服务的连通性,排查网络问题:

# 进入app容器
docker exec -it <你的app容器名称> sh
# 安装mysql客户端(若容器未预装)
apt update && apt install -y mysql-client
# 测试连接
mysql -h db -u admin -p root

若连接失败,可在docker-compose.yml中显式指定自定义网络:

version: '3.8'
networks:
  app-network:
    driver: bridge

services:
  app:
    # ... 原有配置
    networks:
      - app-network
  db:
    # ... 原有配置
    networks:
      - app-network

5. 清理无效MySQL环境变量

db服务中的DATABASE_HOST和DATABASE_PORT属于无效配置(MySQL官方镜像不识别),建议删除以避免混淆。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:43:09