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

使用Docker Compose无法连接MySQL的问题求助

Spring Boot微服务Docker Compose部署后无法连接MySQL数据库问题

我有一个基于Spring Boot的微服务应用,使用MySQL数据库存储用户凭证及其他数据。启动Docker Compose后所有服务均显示运行,但无法访问数据库,持续收到如下错误:

成功发送到服务器的最后一个数据包是0毫秒前。驱动未收到来自服务器的任何数据包。org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection

我采用YAML配置服务,凭证存储在.env文件中,即使硬编码凭证错误仍存在。不使用Docker Compose,以普通Java程序运行时一切正常。应用运行时,所有服务在Eureka中可见,可访问登录页面但无法登录,调用认证API时,即使提供有效凭证仍返回401 Unauthorized而非200。

Docker Compose配置

services:
  eureka-server:
    build: ./naming-server
    ports:
      - "8761:8761"

  db:
    image: mysql:latest
    ports:
      - "3307:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: i_am_biker_db
      MYSQL_USER: biker
      MYSQL_PASSWORD: ${DB_PASSWORD}
    volumes:
      - mysql-data:/var/lib/mysql


  api-gateway:
    build: ./api-gateway
    ports:
      - "8765:8765"
    depends_on:
      - eureka-server
    env_file:
      - .env
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eureka-server:8761/eureka/"

  web-service:
    build: ./web-service
    depends_on:
      - eureka-server
    env_file:
      - .env
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eureka-server:8761/eureka/"

  maintenance-service:
    build: ./maintenance-service
    depends_on:
      - eureka-server
    env_file:
      - .env
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eureka-server:8761/eureka/"

  bikes-service:
    build: ./bikes-service
    depends_on:
      - eureka-server
      - db
    env_file:
      - .env
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eureka-server:8761/eureka/"
      DATASOURCE_URL: jdbc:mysql://db:3306/i_am_biker_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
      DATASOURCE_USERNAME: biker

  authentication-service:
    build: ./authentication-service
    ports:
      - "8900:8900"
    depends_on:
      - eureka-server
      - db
    env_file:
      - .env
    environment:
      EUREKA_CLIENT_SERVICEURL_DEFAULTZONE: "http://eureka-server:8761/eureka/"
      DATASOURCE_URL: jdbc:mysql://db:3306/i_am_biker_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
      DATASOURCE_USERNAME: biker

volumes:
  mysql-data:

排查与解决建议

  • 解决数据库启动就绪问题:depends_on仅保证服务启动顺序,不确保MySQL完全初始化完成。给db服务添加健康检查,让依赖服务等待数据库就绪:

    db:
      # 原有配置不变
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "biker", "-p${DB_PASSWORD}"]
        interval: 10s
        timeout: 5s
        retries: 5
    

    同时修改依赖db的服务配置:

    bikes-service:
      depends_on:
        db:
          condition: service_healthy
    authentication-service:
      depends_on:
        db:
          condition: service_healthy
    
  • 验证连接参数与驱动兼容性:

    1. 进入服务容器执行echo $DATASOURCE_PASSWORD,确认密码参数是否正确传递
    2. 检查MySQL驱动版本:mysql:latest为8.x版本,需使用mysql-connector-java:8.0+或mysql-connector-j:8.0+驱动
  • 测试容器间网络连通性:进入authentication-service容器,执行ping db或telnet db 3306,确认能连通数据库服务。若不通,检查Docker Compose默认网络是否正常,避免自定义网络导致隔离。

  • 检查数据库初始化状态:进入db容器,执行mysql -u biker -p${DB_PASSWORD} i_am_biker_db,确认数据库、表结构是否存在。若数据卷异常,可执行docker-compose down -v删除卷后重新启动初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 03:13:09