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

Docker部署Spring Boot应用无法连接Docker MySQL问题求助

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

本地运行Spring Boot应用能正常连接Docker中的MySQL,MySQL Workbench也能访问该实例,但将应用打包为Docker镜像运行时出现连接拒绝错误,核心原因为JDBC连接失败。

核心问题原因

Docker容器内的127.0.0.1指向容器自身的localhost,而非宿主机,因此无法访问宿主机上运行的MySQL容器。


解决方案

方案1:使用Docker自定义网络(推荐)

这是Docker容器间通信的标准方式,通过自定义网络实现容器间的DNS解析。

  1. 创建自定义Docker网络:
docker network create spring-mysql-network
  1. 启动MySQL容器时加入该网络(指定容器名为mysql-db):
docker run -d \
  --name mysql-db \
  --network spring-mysql-network \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=test \
  -p 3306:3306 \
  mysql:8.0
  1. 修改application.yml中的数据库URL,使用MySQL容器名作为主机:
spring:
  datasource:
    url: jdbc:mysql://mysql-db:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
        format_sql: true
  1. 构建并启动Spring Boot容器,加入同一网络:
docker build -t spring-mysql-app .
docker run -d \
  --name spring-app \
  --network spring-mysql-network \
  -p 8080:8080 \
  spring-mysql-app

方案2:使用宿主机IP地址

找到宿主机的局域网IP(例如192.168.1.100),替换配置中的127.0.0.1:
修改application.yml:

spring:
  datasource:
    url: jdbc:mysql://192.168.1.100:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: root

注意:确保MySQL容器已映射3306端口到宿主机,且宿主机防火墙允许3306端口的入站连接。

方案3:使用Host网络模式(不推荐)

运行Spring Boot容器时使用--network host参数,让容器直接使用宿主机的网络栈,此时容器内的127.0.0.1指向宿主机:

docker run -d \
  --name spring-app \
  --network host \
  spring-mysql-app

该方式会破坏容器的网络隔离性,仅适合临时测试,不推荐生产环境使用。


额外检查项

  • 确认MySQL容器的bind-address设置为0.0.0.0(允许所有IP访问),MySQL 8.0默认已开启此配置。
  • 验证MySQL容器是否正常运行:执行docker logs mysql-db查看日志,确认服务启动成功。
  • 检查数据库用户名、密码是否与MySQL容器初始化时的配置一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:02