spring 引导项目无法访问由 docker 创建的 mysql 数据库

spring boot project can not access mysql db that is created by docker

我正在开发一个没有 docker 的 Spring 引导项目,我尝试连接一个 MYSQL 8 db。我通过 docker 创建了数据库。但是Spring引导项目无法访问mysql。有一个例外,“用户 'root'@'172.21.0.1'(使用密码:YES)拒绝访问”。

但是我可以使用 mysql Workbench 访问它,并且我可以访问 mysql 终端。

我尝试通过 运行 解决 mysql 终端上的这些命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.21.0.1' WITH GRANT OPTION; 

我该如何继续解决这个问题?

docker-compose.yml:

version: '3.1'

services:
  mysql:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 020688
      MYSQL_DATABASE: ticketdb
      MYSQL_PASSWORD: 020688
      MYSQL_USER: root
    ports:
      - '3306:3306' 

票-service.yml

spring:
  application:
    name: ticket-service
  datasource:
    url: jdbc:mysql://localhost:3306/ticketdb
    username: root
    password: 020688
  jpa:
    database: mysql
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    hibernate:
      ddl-auto: update 

异常:

Caused by: java.sql.SQLException: Access denied for user 'root'@'172.21.0.1' (using password: YES)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.18.jar:8.0.18]
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.18.jar:8.0.18]


您正在尝试以 root 用户身份从我假设的另一台主机进行连接(因为它看起来像这样)。默认情况下,mysql 不允许这样做(afaik)。

也许看看这个 post,可能会解决您的问题:

mysql-root-access-from-all-hosts

在您的 SQL GRANT 中,您创建了一个主机为 127.21.0.1 的用户,但您的应用程序似乎 运行 位于 172.21.0.1

虽然问题可能打错了。