我有一个使用mysql的简单Java应用程序。
这是我的docker-compose.yaml
:
version: '2.1'
services:
docker-mysql:
image: mysql:latest
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test2
- MYSQL_PASSWORD=root
ports:
- 3306:3306
my-app:
image: 0935a6b56fe5
depends_on:
- docker-mysql
ports:
- 8080:8080
environment:
- DATABASE_HOST=docker-mysql
- DATABASE_USER=root
- DATABASE_PASSWORD=root
- DATABASE_NAME=test2
- DATABASE_PORT=3306
ID为0935a6b56fe5
的图像是mysql
图像。
这是我的application.properties
:
## Server config
server.port=8080
server.tomcat.uri-encoding=utf-8
## MYSQL JPA
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.datasource.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=
spring.datasource.test-while-idle=true
spring.datasource.test-on-borrow=true
spring.datasource.validationQuery=SELECT 1
#Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto=none
spring.datasource.driverClassName=com.mysql.jdbc.Driver
当我尝试docker-compose up
应用程序尝试运行时,它给了我一个拒绝连接的错误。
这有什么问题?
答案 0 :(得分:0)
您的spring.datasource.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf8
指的是localhost。你可以尝试spring.datasource.url=jdbc:mysql://docker-mysql:3306/test2?characterEncoding=utf8
spring.datasource.password=
也为空白。您如何提供密码?
答案 1 :(得分:0)
这行很可能
spring.datasource.url=jdbc:mysql://localhost:3306/test2?characterEncoding=utf8
应阅读
spring.datasource.url=jdbc:mysql://docker-mysql:3306/test2?characterEncoding=utf8
因为您的my-app
在docker容器中运行,而localhost
不是您想的那样。您可以使用在service
中选择的docker-compose.yml
的名称访问docker-compose内部的其他docker容器。