我有一个MySQL + Spring boot
应用的docker compose:
这就是我的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"]
这是我的应用的application.properties
:
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 !
答案 0 :(得分:1)
您应将以下属性更改为使用用户并通过docker-mysql中定义的pass。
spring.datasource.password=pass
此外,在您的spring-boot应用程序中添加links
选项。
depends_on:
- docker-mysql
links:
- docker-mysql
我认为这并不重要,但是文档中的示例使用的密码不带引号。如果上述方法失败,请尝试该方法。
答案 1 :(得分:0)
您需要使用root用户访问mysql,因此请以mysql root用户运行以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.20.0.3'
IDENTIFIED BY 'pass'
WITH GRANT OPTION;
FLUSH PRIVILEGES;
请检查!