返回

Spring Boot + Docker Compose + MySQL 连接被拒:深入故障排除指南

java

Spring Boot + Docker Compose + MySQL 连接被拒:全面解决方案指南

引言

在构建基于微服务的应用程序时,Spring Boot 和 Docker Compose 携手合作,提供了一种强大的组合,简化了 Java 应用程序的容器化和部署。然而,连接 Spring Boot 应用程序和 Docker Compose 中的 MySQL 数据库时,有时会出现令人沮丧的 "Connection refused" 错误。本文将深入探讨导致此错误的常见原因,并提供逐步指南,帮助你有效解决此问题。

诊断问题

MySQL 服务器配置错误

首先,确保 MySQL 服务器已正确启动和配置。检查 my.cnf 配置文件中的 bind-addressport 设置。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.usernamespring.datasource.password 应与 MySQL 服务器中的相应凭据匹配。

Docker Compose 配置错误

仔细检查 docker-compose.yml 文件中的 dbweb 服务链接和端口映射。depends_on 字段确保 web 服务在 db 服务启动后才启动。

解决步骤

  1. 验证 MySQL 服务器

    • 确保 MySQL 服务器已启动且正在运行。
    • 检查 my.cnf 配置文件中 bind-addressport 的设置。
  2. 检查网络连接

    • 审查 Docker 网络配置,确保服务位于同一网络中。
    • 使用 docker exec -it db ping db 对 MySQL 服务器进行 ping 操作。
  3. 检查 Spring Boot 应用程序配置

    • 验证 application.properties 文件中的数据库连接属性。
    • 检查 spring.datasource.urlspring.datasource.usernamespring.datasource.password 的值。
  4. 检查 Docker Compose 配置

    • 检查 docker-compose.yml 文件中 dbweb 服务的链接和端口映射。
    • 确保 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-addressport 设置。确保 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.urlspring.datasource.usernamespring.datasource.password 的值是否正确。

Q5:如何检查 Docker Compose 配置?
A5: 审查 docker-compose.yml 文件中的 dbweb 服务链接和端口映射。确保 depends_on 字段正确配置,确保 web 服务在 db 服务启动后才启动。