spring boot项目无法访问docker创建的mysql db

问题描述

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

但是我可以使用 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' 

ticket-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)。

也许看看这篇文章,可能会解决你的问题:

mysql-root-access-from-all-hosts

,

在您的 SQL GRANT 中,您已经创建了一个主机为 127.21.0.1 的用户,但您的应用似乎在 172.21.0.1 上运行

不过,这可能是问题中的错误类型。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...