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

Docker容器部署Rest API报MySQL通信链接失败问题求助

故障现象

Docker环境部署Spring Boot Rest API时,抛出MySQL通信链路失败异常:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

已知操作流程:

  • 执行如下命令创建的MySQL容器可正常从宿主机外部连接:
docker run -d -p 3307:3306 --name mysqldb -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=user mysql
  • 执行如下命令创建API容器时触发上述报错:
docker run -p 9090:8080 --name myuserapp --net spring-net -e MYSQL_HOST=mysqldb -e MYSQL_USER=root -e MYSQL_PASSWORD=root -e MYSQL_PORT=3306 userapp/service

配套配置文件内容:
application.properties:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3307/user
spring.datasource.username=root
spring.datasource.password=root

Dockerfile:

FROM openjdk:11 as build
MAINTAINER Andres
COPY target/user-0.0.1-SNAPSHOT.jar user-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java", "-jar","user-0.0.1-SNAPSHOT.jar"]
故障根因

一共三个核心问题:

  • 容器网络不互通:启动API时指定了自定义网络spring-net,但MySQL容器启动时没有加入该网络,两个容器不在同一网桥下,无法通过容器名mysqldb解析到对方地址。
  • 配置硬编码未生效:配置文件里数据库地址写死为jdbc:mysql://localhost:3307/user,完全没有读取启动API时传入的MYSQL_HOST、MYSQL_PORT等环境变量。容器内的localhost指向API容器自身的回环地址,根本访问不到其他容器或宿主机的服务。
  • 端口认知错误:3307是宿主机映射到MySQL容器的端口,仅对宿主机生效,Docker自定义网络内部访问MySQL直接走3306容器端口,不需要走宿主机映射的3307。
修复步骤
  1. 清理现有冲突容器
docker rm -f mysqldb myuserapp
  1. 提前创建用到的自定义网络(已存在可跳过)
docker network create spring-net
  1. 重新启动MySQL容器,将其加入spring-net网络
docker run -d -p 3307:3306 --name mysqldb --net spring-net -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=user mysql
  1. 修改项目application.properties配置,支持读取容器注入的环境变量,修改后内容如下:
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:mysqldb}:${MYSQL_PORT:3306}/user
spring.datasource.username=${MYSQL_USER:root}
spring.datasource.password=${MYSQL_PASSWORD:root}

*配置说明:该写法优先读取系统环境变量,未传入环境变量时自动使用冒号后的默认值,适配本地开发、容器部署多场景。
5. 重新打包Spring Boot项目,构建新的userapp/service镜像,覆盖旧的带硬编码配置的镜像。
6. 按原命令启动API容器即可正常连接数据库。

验证方法

启动API容器后等待10-20秒(Spring初始化+MySQL连接重试需要时间),查看容器日志无通信异常报错,调用业务接口可正常读写数据库数据即为修复成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:16:03