не получается настроить в docker-compose порт подключения к postgres через pgadmin4

задаю порт для контейнера 3002, a из pgadmin почему то подключаюсь к порту 5432 (также при попытке подключится к 3002 кидает ошибку)

конфиг в основном скапирован из доков elestio/pgadmin

version: ' v2.23.3-desktop.2'
services:
  xy:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      PGDATA: /var/lib/postgresql/data
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - '3002:5432'

  pgadmin4:
    image: elestio/pgadmin:latest
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: [email protected]
      PGADMIN_LISTEN_PORT: 8080
    ports:
      - '8080:8080'
    volumes:
      - ./servers.json:/pgadmin4/servers.json

введите сюда описание изображения

разве порт не должен быть 3002 ????


Ответы (2 шт):

Автор решения: FroggerProgger

Вот сделанный для вас docker compose:

version: 'v2.23.3-desktop.2'
services:
  xy:
    image: postgres:latest
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      PGDATA: /var/lib/postgresql/data
    volumes:
      - ./data:/var/lib/postgresql/data
    ports:
      - '3002:5432'

  pgadmin4:
    image: elestio/pgadmin:latest
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: [email protected]
      PGADMIN_LISTEN_PORT: 3002  # Измените порт прослушивания на 3002
    ports:
      - '8080:3002'  # Пробросьте порт 3002 из контейнера pgadmin4 на порт 8080 хоста
    volumes:
      - ./servers.json:/pgadmin4/servers.json

У вас была ошибка с настройкой портов

Всё работает

→ Ссылка
Автор решения: Maksim Alekseev

Эти порты прокидываются для внешнего использования:

  • Извне (вне докера) можно подключится к базе через port host-a 3002 - который прокидывается на порт 5432
ports:
  - '3002:5432'

Это можно проверить указав:

ports:
  - '3002:3002'

внутри контейнера в логах будет не измененный port 5432:

2024-02-05 22:59:12 2024-02-05 19:59:12.575 UTC [1] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 5432
2024-02-05 22:59:12 2024-02-05 19:59:12.575 UTC [1] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 5432
2024-02-05 22:59:12 2024-02-05 19:59:12.577 UTC [1] СООБЩЕНИЕ:  для приёма подключений открыт Unix-сокет "/var/run/postgresql/.s.PGSQL.5432"

Что бы изменить port на котором работает база внутри сети докера, можно указать параметр для контейнера postgresql:

environment:
  PGPORT: '3002'

Тогда в логах будет нужный port 3002 и в pgadmin можно будет приконектиться к базе через него:

2024-02-05 23:08:46 2024-02-05 20:08:46.362 UTC [1] СООБЩЕНИЕ:  для приёма подключений по адресу IPv4 "0.0.0.0" открыт порт 3002
2024-02-05 23:08:46 2024-02-05 20:08:46.363 UTC [1] СООБЩЕНИЕ:  для приёма подключений по адресу IPv6 "::" открыт порт 3002
2024-02-05 23:08:46 2024-02-05 20:08:46.364 UTC [1] СООБЩЕНИЕ:  для приёма подключений открыт Unix-сокет "/var/run/postgresql/.s.PGSQL.3002"
→ Ссылка