docker-compose.yml中设定的mysql端口,要与application.properties中进行统一。(Could not obtain connection to query)
从github上clone下来的项目,能跑起来是第一步啊~暴露问题,定位根因,解决问题,把项目跑起来,还是很开心的~
背景
- 承接上文:Apple M2 Pro芯片 + docker-compose up + mysql、elasticsearch pull失败问题的解法,我顺利执行了docker-compose up命令。
- 但启动基于springboot的java项目时,依然失败,错误为:
[23:00:44.036] [main] [ERROR] [com.zaxxer.hikari.pool.HikariPool:595 ] - HikariPool-1 - Exception during pool initialization.
java.sql.SQLException: Access denied for user ‘root’@‘localhost’ (using password: YES)
[23:14:08.038] [main] [WARN ] [o.h.e.j.e.i.JdbcEnvironmentInitiator:132 ] - HHH000342: Could not obtain connection to query metadata : Access denied for user ‘root’@‘localhost’ (using password: YES)
排查
- (1)从报错信息可知,在连接数据库时,访问被拒绝了,并且和密码有关。通过排查发现,docker-compose.yml中设定的密码为A。而application.properties中设定的密码为B(spring.datasource.password=B)
注意:此处的A和B都是代称,对密码进行了隐藏。
因此,将application.properties中设定的密码修改为A,与docker-compose.yml保持一致。
- (2)但依然跑不起来,我的思路是询问gpt,通过将docker-compose.yml、application.properties中与mysql配置有关的信息,以及报错信息输入给gpt,得到了一个这样的回复:要将application.properties中的spring.datasource.url=jdbc:mysql://localhost:3306/…修改为spring.datasource.url=jdbc:mysql://mysql57:6657/…
虽然gpt的回答是不对的,但启发我要去看一下mysql的端口配置,docker-compose.yml和application.properties是否一致。
- (3)docker-compose.yml中的配置如下所示:
mysql57:
platform: linux/x86_64
image: mysql:5.7
container_name: ...
environment:
MYSQL_ROOT_PASSWORD: ...
ports:
- "6657:3306"
volumes:
- ./mysql-init:/docker-entrypoint-initdb.d/
在Docker中,ports字段用于容器的端口映射。
在docker-compose.yml文件中,"6657:3306"表示将容器内部的3306端口映射到宿主机的6657端口。
这样,任何通过宿主机6657端口进来的流量都会被转发到容器的3306端口,实现了宿主机与容器之间的通信。
因此,application.properties中,要这么写:spring.datasource.url=jdbc:mysql://localhost:6657/...
最后
- 从github上clone下来的项目,能跑起来是第一步啊~
- 暴露问题,定位根因,解决问题,把项目跑起来,还是很开心的~
更多推荐
所有评论(0)