Docker中Spring Boot应用无法连接MySQL的问题求助
解决方案:Docker容器间网络连通问题
核心原因
默认Docker bridge网络不支持容器名的DNS解析,即使手动设置--hostname也无法让不同容器通过名称互相访问。必须使用自定义Docker网络,这类网络默认提供容器名到IP地址的自动解析。
分步解决
1. 创建自定义Docker网络
docker network create e-health-network
2. 重新启动MySQL容器并加入自定义网络
docker run -d -p 3306:3306 --name mysqldb --network e-health-network -e MYSQL_ROOT_PASSWORD=123456789 -e MYSQL_DATABASE=eHealth mysql
3. 启动Spring Boot容器并加入同一网络
docker run -p 8082:8082 --name e-health --network e-health-network e-health
额外验证步骤
检查MySQL容器是否正常启动:
docker logs mysqldb确认日志中出现
ready for connections字样,说明MySQL服务已就绪。验证Spring Boot容器能否解析mysqldb:
docker exec -it e-health ping mysqldb如果能收到响应,说明网络连通正常。
可选优化:处理MySQL启动延迟问题
如果Spring Boot容器启动时MySQL还未完全就绪,会再次出现连接失败。可以:
- 在Spring Boot项目中添加连接重试配置(比如HikariCP的重试参数):
在application.properties中添加:spring.datasource.hikari.connection-timeout=30000 spring.datasource.hikari.max-lifetime=1800000 spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.connection-test-query=SELECT 1 - 或者使用Docker Compose编排,结合
wait-for-it等脚本等待MySQL服务就绪(需额外配置)。
内容的提问来源于stack exchange,提问作者Soft Onz
相关产品推荐
相关产品推荐

