Docker SpringBoot подключается к Docker-контейнеру MySQL - PullRequest
0 голосов
/ 13 марта 2019

Я вытащил образ MySQL Docker и запустил контейнер командой:

docker run --name myapp-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -p 3306:3306 -d mysql:latest

На этом этапе SpringBoot локально работает.Это связано с mysql:

spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

Теперь я хочу, чтобы приложение springBoot также находилось в отдельном док-контейнере, на том же сервере.Для этого я использую Dockerfile:

FROM openjdk:8-jdk-alpine
ADD target/myapp.jar myapp.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "myapp.jar"]

Я запускаю это изображение с:

docker run --name myapp -p 8080:8080 -it myapp:latest

Теперь контейнер springBoot не может найти контейнер myslq.Я пытаюсь:

docker run --name myapp -p 8080:8080 --link=myapp-mysql:mysql -it myapp:latest

Но опять же он не может подключиться к контейнеру MySQL.Как я могу подключить контейнер springBoot к контейнеру mysql?

Я также попытался изменить application.properties на:

spring.datasource.url=jdbc:mysql://myapp-mysql:3306/mydb
spring.datasource.username=root
spring.datasource.password=root

и запустить springBoot с помощью:

docker run --name myapp -p 8080:8080 --link=myapp-mysql:mysql -it myapp:latest

Сноваон не может подключиться к БД:

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.

1 Ответ

0 голосов
/ 13 марта 2019

Чтобы связать контейнеры, я предлагаю заглянуть в docker-compose.

Если вы не хотите использовать docker-compose, то

Прежде всего, в вашемФайл свойств Springboot, измените URL:

spring.datasource.url=jdbc:mysql://[container-name]:3306/mydb

В вашем случае,

docker run --name myapp-mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=mydb -p 3306:3306 -d mysql:latest

имя контейнера: myapp-mysql

, затем попробуйте запустить оба контейнера.

если это не сработает, посмотрите в сети докеров и поместите контейнеры в одну сеть.

Создание сети Docker

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