Как подключиться снаружи к postgres в докер-контейнере?
Столкнулся с проблемой подключения к докер-контейнеру с крутящейся в нем базой данных postgres по логину и паролю. Ниже кусок кода в docker-compose, который поднимает postgres базу данных.
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
ports:
- "5432:5432"
env_file:
- docker/.env
В файле переменных окружения передаю DB_NAME, DB_PASSWORD, DB_USER и так далее:
DB_NAME=movies
POSTGRES_USER=my_name
POSTGRES_PASSWORD=123456
DB_DEV_HOST=localhost
DB_HOST=db
DB_PORT=5432
При попытке подключения через логин/пароль выкидывает ошибку, что такого пользователя нету. Как правильно решить эту проблему?
Это выглядит следующим образом: при выполнении команды
psql -U my_name выкидывается ошибка
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: role "my_name" does not exist
Ответы (3 шт):
Вы пытаетесь подключиться к локальному инстансу PG, а не к тому что в контейнере.
При подключении нужно дополнительно указать хост(-h) и порт(-p).
Из ошибки видно что psql пытается подключиться через сокет, но вы его прокинули через volume(и врядли это нужно).
docker ps посмотрите ваши запущенные приложения (postgres должен быть в статусе Up)
Примерный вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bbe469daff4 postgres:13.3 "docker-entrypoint.s…" 3 months ago Up 3 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp <postgres_name_container>
Далее команда
docker exec -it <postgres_name_container> psql -U <user_name>
Это вход через контейнер (по сути можно зайти подобной командой в баш оболочку и далее psql ... )
Еще вариант:
docker inspect <postgres_name_container> покажет всю инфу о запущенном контейнере включая его реальный адресс (пример ..."IPAddress": "172.22.0.1"...)
Тогда подключение по этому адресу выполняется
psql -h 172.22.0.1 -U <user_name> -d <database name>
У меня получилось подключиться вот так:
docker exec -it <имя_контейнера> psql -U <юзер> -d <база_данных>
docker exec -it container_postgresql psql -U request_fs_zav -d kka_dev
