Spring boot + MySql в докере
Я только начинаю изучать докер и все с ним связанное, поэтому возникла проблема. У меня есть свой сервис на spring boot который должен коннектиться к mysql. На хосте все пректрасно работает. Пытаюсь перенести все это в docker-compose, но почему то там, он не видит бд.
Вот мой докерфайл сервиса:
FROM adoptopenjdk/openjdk11:ubi
VOLUME /tmp
ADD ./hotel.jar app.jar
EXPOSE 8080
CMD sleep 30 && java -jar app.jar
вот проперти сервиса:
spring.datasource.url=jdbc:mysql://localhost:3306/senla_traineeship?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=testtest
spring.liquibase.change-log=classpath:liquibase/db.changelog.master.xml
spring.liquibase.url=jdbc:mysql://localhost:3306/senla_traineeship?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&createDatabaseIfNotExist=true
spring.liquibase.user=root
spring.liquibase.password=testtest
Так выглядит мой docker-compose.xml
version: '2'
services:
mysql:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: testtest
ports:
- 3306:3306
expose:
# Opens port 3306 on the container
- 3306
hotel:
container_name: hotel
build: ./hotel
ports:
- 8080:8080
environment:
MYSQL_SERVER: mysql:3306
depends_on:
- mysql
А вот так выглядит ошибка, которую мне выдает мой сервис:

Если имеет значение, у меня win 8. Что я делаю не так? вроде бы все по мануалам.
Ответы (1 шт):
После нескольких дней исследований, у меня получилось решить данную проблему. Докерфайл не изменился. Проперти сервиса пришлось изменить. Теперь они выглядят так:
spring.datasource.url=jdbc:mysql://mysql:3306/senla_traineeship?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=testtest
spring.liquibase.change-log=classpath:liquibase/db.changelog.master.xml
spring.liquibase.url=jdbc:mysql://mysql:3306/senla_traineeship?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC&createDatabaseIfNotExist=true
spring.liquibase.user=root
spring.liquibase.password=testtest
Докер compose теперь выглядит так:
version: '3'
services:
mysql:
container_name: mysql
image: mysql
restart: always
environment:
MYSQL_DATABASE: senla_traineeship
MYSQL_ROOT_HOST: '%'
MYSQL_ROOT_PASSWORD: testtest
ports:
- "6033:3306"
volumes:
- ./sql:/docker-entrypoint-initdb.d
hotel:
container_name: hotel
build: ./hotel
expose:
- "8080"
ports:
- 8080:8080
environment:
WAIT_HOSTS: mysql:3306
depends_on:
- mysql
Как я понимаю, проблема была в том, что сервис обращался к бд через локалхост, а надо было обращаться через имя хоста контейнера с бд(могу ошибаться). Поэтому мной были явно указаны имена для хоста.