Как подключиться к Postgres на Docker с помощью пакета java.sql? - PullRequest
0 голосов
/ 15 июня 2019

Как мне подключиться к базе данных PostgreSQL (внутри контейнера Docker) с помощью модуля java.sql.?

Я уже запускаю Postgres и обращаюсь к нему с помощью pgadmin с помощью этой конфигурации:

version: '3'

services:
  teste-postgres-compose:
    image: postgres
    environment:
      POSTGRES_PASSWORD: "Postgres2019!"
    ports:
      - "15432:5432"
    volumes:
      - /home/renatogroffe/Desenvolvimento/Docker-Compose/PostgreSQL:/var/lib/postgresql/data 
    networks:
      - postgres-compose-network

  teste-pgadmin-compose:
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: "admin@admin.com.br"
      PGADMIN_DEFAULT_PASSWORD: "PgAdmin2019!"
    ports:
      - "16543:80"
    depends_on:
      - teste-postgres-compose
    networks:
      - postgres-compose-network

networks: 
  postgres-compose-network:
    driver: bridge

Но если я пытаюсь подключиться через приложение Java, я получаю сообщение об ошибке:

org.postgresql.util.PSQLException: попытка подключения не удалась.

Thisэто соединение, которое я пытаюсь вызвать:

try{
    Class.forName("org.postgresql.Driver");            
    connection = DriverManager.getConnection("jdbc:postgresql://teste-postgres-compose:15432/postgres", "postgres", "Postgres2019!");
} catch(ClassNotFoundException erro1){
    throw new RuntimeException(erro1);
} catch (SQLException erro2) {
    throw new RuntimeException(erro2);
}

return connection;

1 Ответ

2 голосов
/ 15 июня 2019

Найдено 2 опечаток в вашей конфигурации

services:
  teste-postgres-compose:
    image: postgres
    environment:
      POSTGRES_PASSWORD: "Postgres2019!"
    ports:
      - "15432:5432"
connection = DriverManager.getConnection("jdbc:postgresql://test-postgres-compose:5432/postgres", "postgres", "Postgres2019!");
  1. Ваша служба имеет имя teste-postgres-compose, но вы подключаетесь к test-postgres-compose
  2. - "15432:5432" вы открыли порт 15432, но подключились к 5432

Обновление:

Извините, моя ошибка. Конечно, второй контейнер - это pgadmin, а не ваше приложение.

Имена контейнеров, такие как teste-postgres-compose, доступны только в сети postgres-compose-network и могут использоваться только другими контейнерами в той же сети. Приложения запускаются локально (я полагаю, вы запустили Java-код из вашей IDE) могут использовать только открытые порты с localhost Имена служб недоступны за пределами сети.

Например, ваш postgres должен быть доступен по адресу:

локальный: 15432

Потому что вы открыли этот порт в файле compose. Также вы можете попробовать loopback 127.0.0.1 или IP-адрес вашего хоста.

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