Spring Boot + Docker Compose + MySQL 连接被拒:深入故障排除指南
2024-05-23 23:04:17
Spring Boot + Docker Compose + MySQL 连接被拒:全面解决方案指南
引言
在构建基于微服务的应用程序时,Spring Boot 和 Docker Compose 携手合作,提供了一种强大的组合,简化了 Java 应用程序的容器化和部署。然而,连接 Spring Boot 应用程序和 Docker Compose 中的 MySQL 数据库时,有时会出现令人沮丧的 "Connection refused" 错误。本文将深入探讨导致此错误的常见原因,并提供逐步指南,帮助你有效解决此问题。
诊断问题
MySQL 服务器配置错误
首先,确保 MySQL 服务器已正确启动和配置。检查 my.cnf
配置文件中的 bind-address
和 port
设置。bind-address
应设置为允许传入连接的 IP 地址,而 port
应与 Docker Compose 中定义的端口(通常为 3306
)匹配。
网络连接问题
接下来,验证 Docker 网络配置是否正确。使用 docker network inspect <network-name>
命令检查网络设置,确保 web
服务和 db
服务位于同一网络中,并可以相互通信。尝试使用 docker exec -it db ping db
命令对 MySQL 服务器进行 ping 操作,以验证连接性。
Spring Boot 应用程序配置错误
检查 application.properties
文件中的数据库连接属性是否准确。spring.datasource.url
应指向 MySQL 服务器(例如,jdbc:mysql://db:3306/teste
),而 spring.datasource.username
和 spring.datasource.password
应与 MySQL 服务器中的相应凭据匹配。
Docker Compose 配置错误
仔细检查 docker-compose.yml
文件中的 db
和 web
服务链接和端口映射。depends_on
字段确保 web
服务在 db
服务启动后才启动。
解决步骤
-
验证 MySQL 服务器
- 确保 MySQL 服务器已启动且正在运行。
- 检查
my.cnf
配置文件中bind-address
和port
的设置。
-
检查网络连接
- 审查 Docker 网络配置,确保服务位于同一网络中。
- 使用
docker exec -it db ping db
对 MySQL 服务器进行 ping 操作。
-
检查 Spring Boot 应用程序配置
- 验证
application.properties
文件中的数据库连接属性。 - 检查
spring.datasource.url
、spring.datasource.username
和spring.datasource.password
的值。
- 验证
-
检查 Docker Compose 配置
- 检查
docker-compose.yml
文件中db
和web
服务的链接和端口映射。 - 确保
depends_on
字段正确配置。
- 检查
其他提示
- 使用最新版本的 Docker Compose 和 Docker。
- 重启 Docker 守护程序和容器。
- 重新构建 Spring Boot 应用程序。
- 检查防火墙规则,确保它们不会阻止与 MySQL 服务器的连接。
- 查看 MySQL 服务器日志以获取更多详细信息。
结论
遵循这些步骤,你将能够有效解决 Spring Boot + Docker Compose + MySQL 连接被拒错误。通过全面检查配置、验证连接和排除故障,你可以确保你的应用程序与数据库成功连接并平稳运行。
常见问题解答
Q1:为什么会收到 "Connection refused" 错误?
A1: 此错误通常表明应用程序无法建立与 MySQL 服务器的 TCP 连接。这可能是由于 MySQL 服务器未正确配置、网络连接问题或应用程序配置错误。
Q2:如何验证 MySQL 服务器配置?
A2: 检查 my.cnf
配置文件中的 bind-address
和 port
设置。确保 bind-address
设置为接受传入连接的 IP 地址,而 port
与 Docker Compose 中定义的端口匹配。
Q3:如何验证网络连接?
A3: 使用 docker network inspect <network-name>
命令检查 Docker 网络配置。确保 web
服务和 db
服务位于同一网络中,并使用 docker exec -it db ping db
对 MySQL 服务器进行 ping 操作。
Q4:如何检查 Spring Boot 应用程序配置?
A4: 验证 application.properties
文件中的数据库连接属性。检查 spring.datasource.url
、spring.datasource.username
和 spring.datasource.password
的值是否正确。
Q5:如何检查 Docker Compose 配置?
A5: 审查 docker-compose.yml
文件中的 db
和 web
服务链接和端口映射。确保 depends_on
字段正确配置,确保 web
服务在 db
服务启动后才启动。