169 похожих чатов

Товарищи снова всем добрый вечер Есть проблема Задача: Требуется запустить веб-сервис на Java

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

8 ответов

21 просмотр

https://docs.docker.com/compose/compose-file/compose-file-v3/ depends_on: - db - redis Типа такого. Докер сначала поднимет бд, потом уже твой сервис

Никита-Нироков Автор вопроса
Михаил Прокудин
https://docs.docker.com/compose/compose-file/compo...

это я понимаю тут проблема как раз в том, что я не могу изначально выполнить билд приложения

Никита Нироков
это я понимаю тут проблема как раз в том, что я не...

а почему вообще при попытке сделать сборку приложения происходит проверка подключения к БД? Для интеграционных тестов по идее должна быть отдельная БД

Никита-Нироков Автор вопроса
Михаил Прокудин
а почему вообще при попытке сделать сборку приложе...

мейвен при попытке сбилдить пишет org.postgresql.util.PSQLException: The connection attempt failed.

Никита Нироков
мейвен при попытке сбилдить пишет org.postgresql.u...

либо скипай тесты, либо прописывай конфигурацию для БД (как должно быть)

Никита-Нироков Автор вопроса
Михаил Прокудин
либо скипай тесты, либо прописывай конфигурацию дл...

ну в принципе наверное логично, что следует в таком случае тесты пропускать проблема в том, что не знаю как правильно

для сервиса, запускаемого в докере, localhost - это своя ОС. То есть сервисная. Чтобы сервис достучался до базы, ему нужно идти по ссылке типа jdbc:postgresql://{имя контейнера с базой}:5432/my_db

в остальном конфигурация относительно стандартная

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта