Можно ли подключить pgadmin только к контейнеру postgres docker на порту 5432, но не к любому другому порту? - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь подключить PGAdmin к контейнеру docker и нашел этот пост ({ ссылка }) очень полезным в этом. Но я пробовал тестировать с использованием порта, отличного от 5432, и мне не повезло.

Например, я попытался использовать 5434 в своем файле docker -compose и попытался использовать этот порт в pgadmin, но получил следующую ошибку (это IP-адрес, найденный при использовании docker inspect)

pgadmin error

Так выглядит мой файл docker -compose (я специально использую разные порты для 'expose' и 'ports', чтобы попробовать и сузьте, какой из них позволит мне подключиться через PGAdmin, но мне не повезло

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: "abcdef"
      POSTGRES_PASSWORD: "abcdef"
    expose:
      - "5435"
    ports:
      - 8000:5434
pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454

Почему у pgadmin нет проблем с 5432, но когда я прошу его использовать другой порт, он выдает эту ошибку ?

Я должен отметить, что ошибка на скриншоте выше связана с попыткой подключить контейнер postgres к контейнеру pgadmin. Я также попытался подключиться к контейнеру postgres в моем локальном приложении pgadmin и получить другая ошибка тайм-аута ниже. Я даже получаю ту же ошибку для порта 5432 при попытке подключиться с помощью моей локальной копии pgadmin.

pgadmin app error

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Сервер PostgreSQL прослушивает порт 5432. Простое изменение конфигурации уровня Docker не влияет на то, где слушает сам процесс сервера. Это означает:

  • Второе число в ports: должно быть 5432. (Первое число может быть любым числом, которое вы хотите.)
  • Подключения из других Docker контейнеров должны соединяться на порт 5432. (ports: игнорируются и не требуются.)
  • Если вы expose: порт, он также должен быть 5432. (Это не имеет практического эффекта и дублирует EXPOSE 5432 в Dockerfile.)

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

1 голос
/ 17 июня 2020

Вы открыли порт 5434 вашего контейнера, но сам PostgreSQL по-прежнему настроен на прослушивание порта 5432. Вот почему вы не достигаете базы данных.

После запуска initdb и перед запуском PostgreSQL, настройте кластер, например, с

echo 'port = 5434' >> datadir/postgresql.auto.conf

Но не должно быть необходимости запускать PostgreSQL на другом порту. Просто сопоставьте порт 5432 с 5434.

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