Docker - Spring Boot JPA (внутри Docker) + MySQL (вне Docker) - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в Docker.Попытка понять концепции на небольшом примере.В настоящее время у меня есть SpringBoot REST JPA (порт 8080) + сервер MySQL (порт 3306).Работает идеально (без докера).

Я хочу развернуть Spring Boot REST JPA в контейнере Docker, и MySQL должен оставаться вне механизма Docker, он должен работать в том же порту localhost: 3306.

Для начала создал простое приложение HelloWorld без JPA, способное контейнеризовать.И в состоянии получить выход из RESTful URL.Теперь сложная часть запустила сервер MySQL 3306 и добавила учетные данные базы данных в код Hello World, построила и снова запустила докер.Я думаю, он не может найти localhost: 3306?Подскажите пожалуйста, как сделать эту работу?Я не хочу контейнеризировать сервер MySQL.

Файл Spring.boot application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

Dokerfile:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} demo-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo-0.0.1-SNAPSHOT.jar"]

ошибка:

2018-05-28 08:24:28.897  INFO 1 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2018-05-28 08:24:28.898  INFO 1 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2962 ms
2018-05-28 08:24:29.250  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Servlet dispatcherServlet mapped to [/]
2018-05-28 08:24:29.260  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2018-05-28 08:24:29.263  INFO 1 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2018-05-28 08:24:29.587  INFO 1 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2018-05-28 08:24:30.811 ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_151]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_151]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_151]

Спасибо.

1 Ответ

0 голосов
/ 29 мая 2018

Оператор докера обычно запускается в отдельном сетевом пространстве имен.Это означает, что, например, localhost относится к контейнеру для процессов, выполняющихся в нем.

Для решения этой проблемы вам потребуется обновить строку подключения:

spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false

, чтобы он выдаетдействительное соединение.Кроме того, есть несколько сетевых опций, которые вы можете использовать для различных сценариев.https://docs.docker.com/network/

Если это предназначено только для локальной разработки, простейшим может быть использование сети host, но, вероятно, это не та настройка, которая вам нужна в производственной среде.

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