mysql - 无法从 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:连接被拒绝(连接被拒绝)
解决方案
您的问题可能是因为 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>
祝你好运 :)
推荐阅读
- sml - 如何在标准 ML 中构造一个只有一个元素的元组?
- javascript - 如何通过 id 删除元素?
- javascript - 在 Underscore JS 中使用页面属性的问题
- reactjs - 订单验证失败:personalDetails.gift:转换为布尔值失败,路径“personalDetails.gift”处的值为“No”
- sql - 使用 max(concat(datetime+integer)) 排序
- python - cx_oracle 执行多条语句并导出数据到excel
- java - Base64解密方法不解码
- php - 无法加载 php 扩展
- javascript - 如何评估 XpathResult 的 Xpath?
- iis - IIS 80端口webstie如何设置一个子应用只有内网和其他互联网?