Java Docker compose for mysql和spring应用程序拒绝访问

Java Docker compose for mysql和spring应用程序拒绝访问,java,mysql,docker,docker-compose,Java,Mysql,Docker,Docker Compose,我有一个docker compose用于MySQL+Spring boot应用程序: 这就是我的docker compose.yaml的样子 version: "3.3" services: docker-mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: 'pass' MYSQL_DATABASE: 'test' volumes: - /var/lib/mysql

我有一个docker compose用于
MySQL+Spring boot
应用程序:

这就是我的
docker compose.yaml
的样子

version: "3.3"
services:
  docker-mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'pass'
      MYSQL_DATABASE: 'test'
    volumes:
      - /var/lib/mysql
    ports:
      - 3306:3306
  my-app:
    build: .
    depends_on:
      - docker-mysql
    ports:
      - 8080:8080
restart: on-failure
这是我的Dockerfile:

FROM openjdk:8
EXPOSE 8080
ADD /target/app-0.0.1.jar app.jar
ENTRYPOINT ["java","-jar","app.jar"]
这是我的应用程序的
应用程序属性

spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://docker-mysql:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=none
spring.datasource.driverClassName=com.mysql.jdbc.Driver
但是,当我使用
docker compose up
应用程序运行容器时,会遇到访问被拒绝的情况:

Access denied for user 'root'@'172.20.0.3' (using password: NO)
在日志文件中,mysql使用空密码创建

[Warning] root@localhost is created with an empty password !

您应该更改以下属性以使用docker mysql中定义的user和pass

spring.datasource.password=pass
另外,在spring boot应用程序中添加
链接
选项

depends_on:
  - docker-mysql
links:
  - docker-mysql

我认为这无关紧要,但文档中的示例使用的是不带引号的密码。如果上述方法失败,也可以尝试

您需要使用root用户访问mysql,因此请使用mysql root用户运行以下命令:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.20.0.3'
    IDENTIFIED BY 'pass' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

请检查

@Sajad:您需要在mysql命令提示符下运行此命令。这可能是您使用本机mysql时所必需的。但是,当您使用docker mysql时,这不是必需的。Docker mysql应该按原样工作,而不需要额外的工作。
链接在Docker/Compose的任何版本上都是不必要的,新到可以使用
版本:“3”
YAML文件。很高兴知道,谢谢。。自从我按照docker的建议转到网络后,我不再使用链接,所以我没有跟上更新。