Я пытаюсь настроить docker-compose, где у одного контейнера есть база данных, а у другого - приложение. Насколько мне известно, мне нужно соединить два контейнера с сетью.
version: "3"
services:
psqldb:
image: "postgres"
container_name: "psqldb"
environment:
- POSTGRES_USER=usr
- POSTGRES_PASSWORD=pwd
- POSTGRES_DB=mydb
ports:
- "5432:5432"
expose:
- "5432"
volumes:
- $HOME/docker/volumes/postgres/:/var/lib/postgresql/data
networks:
- backend
sbapp:
image: "dsb"
container_name: "dsb-cont"
ports:
- "8080:8080"
expose:
- "8080"
depends_on:
- psqldb
networks:
- backend
networks:
backend:
Я также пробовал установить сетевой драйвер на bridge
(который не изменил конечный результат)
networks:
backend:
driver: bridge
Я использую следующий URL для подключения к базе данных
spring.datasource.url=jdbc:postgresql://psqldb:5432/mydb
Я также пытался выставить порт и подключиться с помощью localhost
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
Я такжепопытался использовать порт 5433 вместо 5432.
Независимо от того, какую комбинацию я использовал, я получил следующую ошибку
Connection to psqldb:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
в контейнере приложения. Тем не менее, мой контейнер базы данных остается работоспособным, и я могу нормально подключиться к нему с хоста с помощью URL
spring.datasource.url=jdbc:postgresql://localhost:5432/mydb
. Я также могу подключиться к базе данных с хоста, если полностью удаляю контейнер psqldb из docker-compose.yml (и используйте последний URL для подключения).
Если это имеет какое-либо значение, я использую Spring Boot для приложения с Dockerfile
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
, и я создаю образ с помощью команды
docker build --build-arg JAR_FILE=target/*.jar -t dsb .
Чего мне не хватает в настройке двух контейнеров?