Контейнер Spring Docker не может получить доступ к контейнеру Postgres Docker - PullRequest
1 голос
/ 18 мая 2019

Dockerfile моего весенне-загрузочного приложения:

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/media-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

application.yml

spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/media
    username: postgres
    password: postgres
    hikari:
      connectionTimeout: 30000

а вот это docker-compose.yml:

version: '3'
services:
  db:
    image: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: media
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres

  app:
    build:
      context: ./
      dockerfile: Dockerfile
    depends_on:
      - db
    ports:
      - "8080:8080"

Запуск docker-compose up --build Результат:

app_1 | org.postgresql.util.PSQLException: подключение к 0.0.0.0:5432 отказалась. Проверьте правильность имени хоста и порта и postmaster принимает соединения TCP / IP. app_1

Я предполагаю, что приложение Spring пытается подключиться к postgres до того, как postgres будет готов, но я получаю следующий журнал:

db_1 | 2019-05-18 19: 05: 53.692 UTC [1] LOG: база данных системы готов принимать соединения

1 Ответ

3 голосов
/ 18 мая 2019

Основная цель Docker Compose - ускорить набор контейнеров Docker, которые затем будут функционировать как независимые объекты.По умолчанию все контейнеры будут иметь виртуальное сетевое соединение со всеми остальными, хотя вы можете изменить это, если хотите;вы получите эту функцию, поскольку вы не указали пользовательскую конфигурацию.

Каждый из контейнеров получит виртуальный IP-адрес в виртуальной сети, установленной Docker.Поскольку они являются динамическими, Docker Compose облегчает вам создание внутренних записей DNS, соответствующих каждой службе.Таким образом, у вас будет два контейнера, к которым можно обращаться как app и db соответственно, либо от себя, либо от другого.Если у вас установлен ping, вы также можете пропинговать эти имена либо через docker-compose exec, либо через созданную вручную оболочку.

Таким образом, как мы обнаружили в комментариях, вы можете подключиться от app кjdbc:postgresql://db:5432/media, и оно должно работать.

...