Соединение двух баз данных в другом контейнере с помощью docker-compose - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь настроить 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 .

Чего мне не хватает в настройке двух контейнеров?

1 Ответ

0 голосов
/ 10 ноября 2019

Проблема, с которой я столкнулся, заключалась в том, что докер depends_on только запускает контейнеры в определенном порядке, но не ожидает их фактической готовности.

https://docs.docker.com/compose/startup-order/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...