Spring в контейнере, также должна быть запущена постгря в соседнем контейнере
Проблема:
При запуске через docker-compose изначально требуется .jar-ник сервиса, поэтому я делаю mvn clean install перед этим, но сервис не может сбилдится, потому что валится на проверке подключения к БД, так как она в принципе на этом этапе не запущена
Dockerfile:
FROM openjdk:17-jdk-alpine
COPY target/project.jar /app/project.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "project.jar"]
docker-compose.yml:
version: '3'
services:
my_project:
build: .
ports:
- "8080:8080"
depends_on:
- postgres
volumes:
- /data/images:/app/data/images
restart: unless-stopped
postgres:
image: postgres:13.1
container_name: postgres
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin
POSTGRES_DB: postgres
networks:
mynet:
ipv4_address: 172.20.128.3
volumes:
- /data/postgresql:/var/lib/postgresql/data
ports:
- "5433:5432"
restart: unless-stopped
networks:
mynet:
ipam:
config:
- subnet: 172.20.128.0/24
Скорее всего я тут наворотил лишнего
Подскажите,как решить
Я подумал, что может как то нужно поменять docker-compose или Dockerfile, чтобы сначала поднималась база, но depends_on указан, но это неважно, так как проблема в изначальном билде
Также вопрос, в какую директорию на хосте правильнее делать билд? И где хранить и собственно оттуда же и запускать Dockerfile и docker-compose.yml ?
На текущий момент Docker и docker-compose.yml лежат в корневой директории проекта, а сам билд кладется в target/ там же
И что должно быть указано в application.properties проекта для подключения к постгре учитывая такой docker-compose?
сейчас прописано:
spring.datasource.url=jdbc:postgresql://172.20.128.3:5432/postgres
https://docs.docker.com/compose/compose-file/compose-file-v3/ depends_on: - db - redis Типа такого. Докер сначала поднимет бд, потом уже твой сервис
это я понимаю тут проблема как раз в том, что я не могу изначально выполнить билд приложения
а почему вообще при попытке сделать сборку приложения происходит проверка подключения к БД? Для интеграционных тестов по идее должна быть отдельная БД
мейвен при попытке сбилдить пишет org.postgresql.util.PSQLException: The connection attempt failed.
либо скипай тесты, либо прописывай конфигурацию для БД (как должно быть)
ну в принципе наверное логично, что следует в таком случае тесты пропускать проблема в том, что не знаю как правильно
для сервиса, запускаемого в докере, localhost - это своя ОС. То есть сервисная. Чтобы сервис достучался до базы, ему нужно идти по ссылке типа jdbc:postgresql://{имя контейнера с базой}:5432/my_db
в остальном конфигурация относительно стандартная
Обсуждают сегодня