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

Docker容器中Spring应用无法连接MySQL数据库的解决问询

Spring Docker容器无法连接MySQL的解决方案

关键问题与修复

1. 数据库连接地址错误

Docker容器内的localhost指向容器自身,而非MySQL服务容器。在Docker Compose同一网络中,服务可通过服务名称(即mysqldb)互相访问,因此需修改Spring的数据源URL:

SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/buddyto_mstr_local?useSSL=false&allowPublicKeyRetrieval=true

添加allowPublicKeyRetrieval=true是因为MySQL 8.0默认限制公钥检索,避免连接失败。

2. MySQL环境变量配置错误

mysqldb服务中的MYSQL_USERNAME是无效变量,正确创建用户的变量为MYSQL_USER。若使用root用户连接,可简化环境变量,仅保留必要项:

environment:
  - MYSQL_ROOT_PASSWORD=root
  - MYSQL_DATABASE=buddyto_mstr_local

3. 服务就绪等待问题

depends_on仅控制启动顺序,不保证MySQL完全就绪。需添加健康检查,让Spring服务在MySQL就绪后再启动:
在mysqldb服务中加入健康检查配置,同时修改sample-service的depends_on条件。

修正后的完整docker-compose.yml

version: "3"
services:
  sample-service:
    image: v2stechit/sample-service
    ports:
        - "8080:8080"                      
    restart: always                            
    environment:
        SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/buddyto_mstr_local?useSSL=false&allowPublicKeyRetrieval=true
        SPRING_DATASOURCE_USERNAME: root
        SPRING_DATASOURCE_PASSWORD: root
    networks:
      - spring-mysql
    depends_on:
      mysqldb:
        condition: service_healthy

  mysqldb:
    image: mysql:8.0.29
    networks:
      - spring-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=buddyto_mstr_local
    ports:
      - 3306:3306
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot"]
      interval: 5s
      timeout: 5s
      retries: 5
networks:
  spring-mysql:

额外排查点

  • 确认Spring项目的MySQL驱动版本与MySQL 8.0兼容,推荐使用mysql-connector-java:8.0.29及以上版本。
  • 若仍遇认证失败,可在mysqldb环境变量中添加MYSQL_INITDB_ARGS="--default-authentication-plugin=mysql_native_password",适配旧驱动的加密规则。

验证步骤

  1. 清理现有容器:docker-compose down
  2. 启动服务:docker-compose up -d
  3. 查看Spring日志:docker-compose logs sample-service,确认数据库连接状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:50:28