Как подключиться снаружи к 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 шт):

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

Вы пытаетесь подключиться к локальному инстансу PG, а не к тому что в контейнере.

При подключении нужно дополнительно указать хост(-h) и порт(-p).

Из ошибки видно что psql пытается подключиться через сокет, но вы его прокинули через volume(и врядли это нужно).

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

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>

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

У меня получилось подключиться вот так:

docker exec -it <имя_контейнера>     psql -U <юзер>         -d <база_данных>
docker exec -it container_postgresql psql -U request_fs_zav -d kka_dev

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

→ Ссылка