Я пытаюсь подключиться к экземпляру 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.
Пожалуйста, проверьте порт, который вы используете. По умолчанию 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
#
@AntonioMoreno Я отредактировал свой ответ, пожалуйста, проверьте. Если это не сработает, вы можете продолжить отладку, начиная с докера и переходя на хост-компьютер. Проверьте, запущен ли postgres и какой порт он прослушивает.
Раньше я пытался использовать порт 5432, но он не позволял мне. Я понял, что там уже был запущен экземпляр postgres. Итак, теперь, когда я запускаю контейнер на 5432, я могу подключиться к экземпляру postgres из Pgadmin, используя 127.0.0.1, как вы сказали. Большое спасибо!
не беспокойся @AntonioMoreno! удачи! Пожалуйста, примите ответ, чтобы вопрос не появился в списке неотвеченных.
Один из подходов заключается в том, что вы можете получить доступ к док-контейнеру 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:
Убедитесь, что оба находятся в одной сети.
Спасибо за ответ. На самом деле у меня есть сеть моста, но при попытке доступа к базе данных по адресу 127.0.0.1 я получаю следующую ошибку: невозможно подключиться к серверу: подключение к серверу по адресу «127.0.0.1», порт 5433 не удалось: сервер закрыл соединение неожиданно Возможно, это означает, что сервер аварийно завершил работу до или во время обработки запроса. Однако экземпляр postgres в контейнере по-прежнему работает безупречно.