Подключение приложения Spring / Hibernate к Mysql, работающему в Docker - PullRequest
0 голосов
/ 01 января 2019

У меня есть приложение Spring / Hibernate, которое работало с h2-database.Теперь мне нужно подключить его к базе данных Mysql, работающей в контейнере Docker.

Контейнер Mysql получен непосредственно со страницы Dockerhub .

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=test -d mysql:latest

В моем application.properties у меня есть:

spring.jpa.hibernate.ddl-auto=create
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=my-secret-pw

Сразу послезапускается, я получаю это исключение

com.mysql.cj.jdbc.exceptions.CommunicationsException: сбой линии связи

Последний пакет, успешно отправленный на сервер, был 0 миллисекунд назад.Драйвер не получил никаких пакетов с сервера.в com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException (SQLError.java:174) ~ [mysql-connector-java-8.0.13.jar: 8.0.13] в com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException (SQLExceptionsMapping.java:64) ~ [mysql-connector-java-8.0.13.jar: 8.0.13] в com.mysql.cj.jdbc.ConnectionImpl.createNewIO (ConnectionImpl.java:835) ~ [mysq-connector-java-8.0.13.jar: 8.0.13] в com.mysql.cj.jdbc.ConnectionImpl. (ConnectionImpl.java:455) ~ [mysql-connector-java-8.0.13.jar: 8.0.13] at com.mysql.cj.jdbc.ConnectionImpl.getInstance (ConnectionImpl.java:240) ~ [mysql-connector-java-8.0.13.jar: 8.0.13]

Контейнер MysqlКажется, работает нормально.Я могу войти и посмотреть, как он работает.

Итак, где может быть проблема?

Ответы [ 2 ]

0 голосов
/ 01 января 2019

JDBC Url нужно изменить, вам нужно заменить localhost на имя контейнера mysql some-mysql

spring.datasource.url=jdbc:mysql://some-mysql:3306/test?autoReconnect=true&useSSL=false

Укажите ваш порт MYSQL в команде и выполните команду ниже.

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=test -e MYSQL_USER=user -e MYSQL_PASSWORD=password -d mysql:latest
0 голосов
/ 01 января 2019

Вы должны опубликовать порт 3306 из своего экземпляра докера, чтобы иметь возможность подключиться к нему извне.

docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=test -d mysql:latest

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...