docker-compose.yml中设定的mysql端口,要与application.properties中进行统一。(Could not obtain connection to query)

背景

  • 承接上文: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下来的项目,能跑起来是第一步啊~
  • 暴露问题,定位根因,解决问题,把项目跑起来,还是很开心的~

你可能感兴趣的:(搭建环境,#,Java,docker,mysql,容器)