Я пытаюсь подключиться из моего приложения для весенней загрузки к базе данных MySQL в Docker.Каждый в своем собственном контейнере.
Но у меня, должно быть, что-то не так, потому что я не могу этого сделать.
Для простоты:
свойства приложения:
# URL for the mysql db
spring.datasource.url=jdbc:mysql://workaround-mysql:3308/workaround?serverTimezone=UTC&max_allowed_packet=15728640
# User name in mysql
spring.datasource.username=springuser
# Password for mysql
spring.datasource.password=admin
#Port at which application runs
server.port=8080
docker-compose для MySQL:
version: '3'
services:
workaround-mysql:
container_name: workaround-mysql
image: mysql
environment:
MYSQL_DATABASE: workaround
MYSQL_USER: springuser
MYSQL_PASSWORD: admin
MYSQL_ROOT_PASSWORD: admin
MYSQL_ROOT_HOST: '%'
ports:
- "3308:3306"
restart: always
Так довольно просто, верно?База данных, с которой я начинаю docker-compose up
:
Кажется, что пока все работает нормально.
Теперь, когда у меня запущена база данныхДля приложения это его docker-compose.yml
:
version: '3'
services:
workaround:
restart: always
# will build ./docker/workaround/Dockerfile
build: ./docker/workaround
working_dir: /workaround
volumes:
- ./:/workaround
- ~/.m2:/root/.m2
expose:
- "8080"
command: "mvn clean spring-boot:run"
Для его Dockerfile
я использую Linux Alpine и Java.
FROM alpine:3.9
....add java...
RUN apk update
RUN apk add dos2unix --update-cache --repository http://dl-3.alpinelinux.org/alpine/edge/community/ --allow-untrusted
RUN apk add bash
RUN apk add maven
Супер просто.Теперь давайте запустим приложение:
Неизвестный хост, поэтому давайте попробуем IP тогда:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' workaround-mysql
# URL for the mysql db
spring.datasource.url=jdbc:mysql://172.20.0.2:3308/workaround?serverTimezone=UTC&max_allowed_packet=15728640
Теперь я получаю тайм-аут:
Как видите, я получаю ошибку.Что не так с моей настройкой и как это исправить?Либо у меня неизвестное исключение хоста, либо отказано в соединении, либо истекло время ожидания соединения.
Я попытался:
Примечания :
@ Выход Vusal ОТВЕТ:
Тольковещь, отличная от кода в ответе Я ждал, пока база данных будет готова 30 секунд
command: /bin/bash -c "sleep 30;mvn clean spring-boot:run;"