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

Docker Compose部署SpringBoot与MySQL容器时服务无法连接数据库问题

问题根源

该场景下数据库连接失败由三类问题共同导致:

  • 账号密码配置不匹配:MySQL容器通过环境变量MYSQL_ROOT_PASSWORD: root设置的root用户初始密码为root,但Spring Boot服务配置的数据库连接密码为sh123,密码校验直接不通过。
  • 依赖启动逻辑存在缺陷:Docker Compose原生的depends_on配置仅控制容器启动顺序,不会等待MySQL完成初始化流程。MySQL 8.0首次启动需要执行数据目录初始化、权限表加载、系统库创建等操作,耗时10~30秒不等,Spring Boot服务在容器启动后立即尝试建立数据库连接,此时MySQL尚未就绪接收请求,就会触发多次重试后放弃连接的报错。
  • Spring数据源配置项命名错误:Spring Boot默认识别JDBC连接地址的环境变量为SPRING_DATASOURCE_URL,配置中写的SPRING_DATA_URL属于自定义命名,如果应用内没有额外做环境变量映射,Spring无法读取到你配置的容器内MySQL连接地址,会默认尝试连接本地数据库,进一步加剧连接失败问题。
  • 补充说明:同Docker网络下容器间访问MySQL直接走3306端口的配置是正确的,3308:3306的端口映射仅用于宿主机访问数据库,不是本次故障的诱因。
修复方案
  1. 统一两边的密码配置:要么将MySQL容器的MYSQL_ROOT_PASSWORD值改为sh123,要么将Spring服务侧的数据库密码配置改为root,保证凭据一致。
  2. 修正Spring Boot环境变量命名,使用Spring Boot默认识别的标准配置名:连接地址对应SPRING_DATASOURCE_URL、用户名对应SPRING_DATASOURCE_USERNAME、密码对应SPRING_DATASOURCE_PASSWORD、激活配置对应SPRING_PROFILES_ACTIVE、服务端口对应SERVER_PORT,避免自定义变量名导致配置不生效。
  3. 给MySQL服务增加健康检查,将depends_on改为等待MySQL健康状态就绪后再启动Spring服务,同时在JDBC连接串中增加allowPublicKeyRetrieval=true参数,解决MySQL 8.0默认身份验证插件的公钥检索问题。

修正后的核心Docker Compose配置片段如下:

version: '3.9'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql_DB
    ports:
      - "3308:3306"
    environment:
      MYSQL_ROOT_PASSWORD: sh123
      MYSQL_DATABASE: delivery
    volumes:
      - ~/apps/mysql1:/var/lib/mysql
    networks:
     - dev-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-psh123"]
      interval: 5s
      timeout: 5s
      retries: 10
  prioritization-service:
    image: sh/prioritization-service:1.0
    ports:
      - "9085:8085"
    depends_on:
      mysql:
        condition: service_healthy
    environment:
      SPRING_DATASOURCE_USERNAME: root
      SPRING_DATASOURCE_PASSWORD: sh123
      SERVER_PORT: 8085
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/delivery?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
      SPRING_PROFILES_ACTIVE: development,data
    networks:
      - dev-network

networks:
  dev-network:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:57:25