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

Java Spring Boot与MySQL的Docker容器搭建及通信故障解决

解决Spring Boot Docker容器与MySQL Docker容器通信问题

我来帮你搞定这个容器通信的坑!你的问题大概率出在网络隔离或者数据库连接配置错误上,下面给你一步步梳理正确的操作流程和排查方法:

核心问题拆解

你现在的操作是分别启动两个容器,但它们可能不在同一个Docker网络里,而且Spring Boot配置里如果用了localhost,容器内部的localhost指的是自己,根本找不到MySQL容器。

正确操作流程

1. 先创建专属的Docker网络(关键!)

Docker默认的bridge网络在容器间的DNS解析有局限,咱们先建一个专属网络让两个容器能互相识别:

docker network create spring-mysql-network

2. 启动MySQL容器并加入这个网络

把你原来的MySQL启动命令改一下,加入刚创建的网络,这样Spring Boot容器就能直接用容器名aname-mysql访问它:

docker run -d \
  --name aname-mysql \
  --network spring-mysql-network \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=db \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=root \
  mysql:5.7

3. 构建Spring Boot镜像(和你原来的步骤一致)

./gradlew build docker -x test

4. 启动Spring Boot容器并加入同一网络

启动时一定要指定同一个网络,同时记得先修改Spring Boot的数据库配置:

docker run -d \
  --name spring-boot-app \
  --network spring-mysql-network \
  -p 8080:8080 \
  # 替换成你实际的Spring Boot镜像名和标签
  your-spring-boot-image:latest

必须修改的Spring Boot数据库配置

打开你的application.properties或者application.yml,把数据库连接URL改成用MySQL容器名:

# application.properties
spring.datasource.url=jdbc:mysql://aname-mysql:3306/db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

如果用YAML格式:

# application.yml
spring:
  datasource:
    url: jdbc:mysql://aname-mysql:3306/db?useSSL=false&serverTimezone=UTC
    username: root
    password: root

这里的aname-mysql就是你给MySQL容器起的名字,Docker会在同一个网络里自动把这个名字解析成MySQL容器的IP。

万一还是不行?试试这些排查步骤

  • 先进入Spring Boot容器,ping一下MySQL容器名:docker exec -it spring-boot-app ping aname-mysql,如果能ping通,说明网络没问题,问题出在数据库配置或者MySQL本身
  • 看看MySQL容器有没有正常启动:docker logs aname-mysql,检查初始化日志有没有报错
  • 确认MySQL容器的3306端口在监听:docker exec -it aname-mysql netstat -tulpn | grep 3306

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:14