Не удается получить доступ к экземпляру Postgres, работающему в контейнере Docker, из Pgadmin

Я пытаюсь подключиться к экземпляру Postgres, работающему в контейнере Docker. В файле docker-compose служба postgres выглядит так:

    flask-api-postgres:
        container_name: flask-api-postgres
        image: postgres:13.4-alpine
        env_file:
            - dev.env
        ports:
            - "5433:5433"
        networks:
            flask-network:

С docker inspect я получаю, что у контейнера есть адрес: 172.19.0.2. API работает нормально, но при попытке доступа к базе данных из Pgadmin с конфигурацией, показанной на изображении (пользователь и пароль установлены правильно), я получаю показанную ошибку. Конфиг Pgadmin

Я не знаю, как получить доступ к экземпляру postgres из pgadmin.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, проверьте порт, который вы используете. По умолчанию 5432.

См. эксперимент:

> docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED          STATUS          PORTS                              NAMES
0c4d92a623a6   postgres:latest   "docker-entrypoint.s…"   14 minutes ago   Up 14 minutes   5432/tcp, 0.0.0.0:5433->5433/tcp   cannot-access-postgres-instance-running-in-docker-container-from-pgadmin-database-1
> docker exec -it 0c4d92a623a6 sh
# psql "host=127.0.0.1 port=5433"
psql: error: connection to server at "127.0.0.1", port 5433 failed: Connection refused
    Is the server running on that host and accepting TCP/IP connections?
# psql "host=127.0.0.1 port=5432"
psql: error: connection to server at "127.0.0.1", port 5432 failed: FATAL:  role "root" does not exist
#

Спасибо за ответ. На самом деле у меня есть сеть моста, но при попытке доступа к базе данных по адресу 127.0.0.1 я получаю следующую ошибку: невозможно подключиться к серверу: подключение к серверу по адресу «127.0.0.1», порт 5433 не удалось: сервер закрыл соединение неожиданно Возможно, это означает, что сервер аварийно завершил работу до или во время обработки запроса. Однако экземпляр postgres в контейнере по-прежнему работает безупречно.

AntonioMoreno 07.02.2023 23:27

@AntonioMoreno Я отредактировал свой ответ, пожалуйста, проверьте. Если это не сработает, вы можете продолжить отладку, начиная с докера и переходя на хост-компьютер. Проверьте, запущен ли postgres и какой порт он прослушивает.

morkot 08.02.2023 13:14

Раньше я пытался использовать порт 5432, но он не позволял мне. Я понял, что там уже был запущен экземпляр postgres. Итак, теперь, когда я запускаю контейнер на 5432, я могу подключиться к экземпляру postgres из Pgadmin, используя 127.0.0.1, как вы сказали. Большое спасибо!

AntonioMoreno 08.02.2023 18:57

не беспокойся @AntonioMoreno! удачи! Пожалуйста, примите ответ, чтобы вопрос не появился в списке неотвеченных.

morkot 09.02.2023 17:02

Один из подходов заключается в том, что вы можете получить доступ к док-контейнеру postgres db из pgadmin, который размещен на вашем хост-компьютере, используя 127.0.0.1 вместо 172.19.0.2.

Другой способ — создать еще один контейнер для pgadmin. В этом случае вы можете получить доступ к своему PostgreSQL, используя IP-адрес контейнера (например: 172.19.0.2). Добавьте это в свой файл docker-compose

  pgadmin:
    image: dpage/pgadmin4
    depends_on:
      - flask-api-postgres
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: admin
    restart: unless-stopped
    networks:
        flask-network:

Убедитесь, что оба находятся в одной сети.

Другие вопросы по теме