首页 > 解决方案 > 无法从 Spring Boot 应用程序连接 MYSQL docker 容器

问题描述

我有 MYSQL 容器正在运行,我能够执行它并能够使用“mysql -h 172.17.0.2 -u root -p”从主机连接。我已经执行了“docker run --name=mysql-host -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.32”来运行docker镜像。

但是当我尝试通过 Spring Boot 应用程序访问时,下面给出的连接被拒绝是 application.properties 中的属性

spring.datasource.url=jdbc:mysql://172.17.0.2:3306/auditLog?createDatabaseIfNotExist=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

我正在运行我的罐子,如下所示

java -jar service-1.0.0.jar spring.config.location=file:///home/10662598/Downloads/entity-search-service-deploymentFolder/entity-search-service/configs/application.properties

错误获取原因:java.net.ConnectException:连接被拒绝(连接被拒绝)

标签: mysqlspring-bootdocker

解决方案


您的问题可能是因为 Spring Boot 应用程序无法访问数据库(mysql),这可能是因为它们不在同一个网络中。

如果您的 Spring Boot 应用程序在容器内运行

从您的问题中,我看到您正在使用 运行容器docker run...,因此当您使用该命令启动 MySQL 和 Spring boot 应用程序时,它们不在同一个网络中。

解决方案是,首先创建一个网络,然后启动 MySQL 和 Spring 应用程序以在该网络中运行:

docker network create my-net

然后像往常一样启动您的容器,但请记住将您的容器添加到您刚刚创建的网络中:

docker run ... --network my-net

现在您的容器在同一个网络中并且应该可以相互访问,您可以通过 exec 到 Spring boot 应用程序来验证这一点,并尝试curl使用 Mysql 容器的容器名称(和端口):

curl <mysql_container_name>:3306

如果 Spring Boot 应用程序正在主机上运行

然后只需确保将 Mysql 端口映射到主机并使用连接localhost:<mapped_port>

祝你好运 :)


推荐阅读