我在EC2实例(EC2_IP)中设置了一个spring-boot docker容器,我在另一个VM中托管了一个MySQL . 我验证了mysql主机(MYSQL_IP)可以从托管docker容器的EC2实例访问 .
我在docker run期间使用docker环境变量传递spring.datasource.url参数 .
Spring 季启动应用程序失败抱怨用户 db_user@EC2_IP 拒绝访问错误消息 . 这是我无法理解和解决的部分 . 我不明白为什么它试图连接到EC2_IP而不是 db_user@MYSQL_IP .
我做了一个docker inspect,我验证了spring.datasoure.url的环境变量是否正确传递,它是db_user @ MYSQL_IP:3306 .
我花了好几个小时试图解决这个问题,但没有运气 . 任何帮助表示赞赏 .
要根据注释澄清,我已正确配置数据源 .
在docker检查中,Args的值:
-Dspring.datasource.url = JDBC:MySQL的:// MYSQL_IP:3306 /测试
此外,我检查了我是否传递了一些无效的IP(例如)一些随机文本,然后它抛出一个错误,说主机无效(这确认,它正在接收我传入的主机) . 但是,如果我配置为外部IP,它似乎解析为主机IP地址(EC2_IP) .
3 回答
你需要设置两者
如指定here
最后想出了问题,这是我的数据库用户权限的问题 . 事实证明我的mysql用户权限存在问题 . 这不是docker或springboot的问题 .
Access denied for user 'test'@'localhost' (using password: YES) except root user
如果我只是清楚地关注错误信息并理解它所说的话,我就不会浪费每个人的时间 .
问题似乎是在spring.datasource.url;它不应该是这样的格式:
而不是:
例如:
注意每个冒号之前的转义反斜杠\ :.
如果使用默认的mysql端口,则可以省略:3306部分:
作为参考,请检查official documentation here .
类似的工作方案是:
1-在application.properties中:
2-运行docker run时: