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

Docker部署SpringBoot应用时MySQL通信链接失败求助

你的配置里存在多个导致数据库连接失败的问题,逐个修复即可:

1. 数据库服务名、端口与库名错误

  • Docker Compose内部服务之间通过服务名访问,你在application.properties和docker-compose.yml里用的backend是无效主机名,要改成数据库服务名db。
  • MySQL容器内部默认端口是3306,你配置里写的3307是错误的,容器间通信不需要用宿主机映射端口,直接用容器自身的3306端口。
  • docker-compose.yml里的SPRING_DATASOURCE_URL写的库名是database,要改成你预设的proyectodiagrama。

修复后的application.properties数据库配置:

#database
spring.datasource.url=jdbc:mysql://db:3306/proyectodiagrama?autoReconnect=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root  # 和docker-compose里的MYSQL_ROOT_PASSWORD保持一致

修复后的docker-compose.yml环境变量:

SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/proyectodiagrama?autoReconnect=true&useSSL=false

2. 数据库密码不匹配

你在docker-compose.yml里设置了MYSQL_ROOT_PASSWORD: root,但application.properties里的数据库密码为空,必须改成root才能正常连接。

3. 确保数据库就绪后再启动Web服务

depends_on仅保证启动顺序,不保证MySQL完成初始化。给db服务添加健康检查,确保数据库就绪后再启动web:

修改docker-compose.yml的db服务:

db:
    image: mysql:5.7
    volumes:
        - /opt/test:/var/lib/mysql
        - ./mysql-dump:/docker-entrypoint-initdb.d
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: proyectodiagrama
        MYSQL_USER: 
        MYSQL_PASSWORD: 
    ports:
        - 3306:3306
    healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-proot"]
        interval: 5s
        timeout: 5s
        retries: 5

修改web服务的depends_on:

web:
    depends_on:
        db:
            condition: service_healthy
    # 其余配置保持不变

4. 统一启动方式

不要混用docker-compose up和docker run -p 8080:8080 mywebapp,后者启动的容器不在docker-compose的专属网络中,无法访问db服务。统一用docker-compose up启动整个服务栈。

5. 验证连接(可选)

修复后启动服务,如果仍有问题,可进入web容器内部,用ping db测试网络连通性,或用mysql -h db -u root -proot直接测试数据库连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:27:54