Docker与依赖的mysql组合使连接被拒绝

时间:2018-09-24 14:23:50

标签: java mysql docker

我有一个使用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应用程序尝试运行时,它给了我一个拒绝连接的错误。

这有什么问题?

2 个答案:

答案 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容器。