Как подключаться к postgresql в docker

Установил оф образ postgres и запускаю его командой

sudo docker run -it -p 5432:5432 --name database -e POSTGRES_PASSWORD=q postgres

Получаю многа букаф, но запускается сервер postgresql в docker-е.

2024-03-06 08:47:10.553 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432

Далее пытаюсь подключиться к этой бд с локальной машины командой

psql -U postgres

И получаю

psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?

При этом на локальной машине я отключил postgresql service, чтобы не подключаться к локальному cерверу postgresql

Как же подключаться к серверу postgres в docker.Еще я хочу узнать путь тома, чтобы пробросить его в локальную директорию, чтобы данные, которые попадают в postgres сервер в контейнере, сохранаялись на локальной машине и сервер в контейнере работал именно с данными на локальной машине.

Подключить том я хочу ключом

-v /var/lib/local/postgres/postgres-data:/var/lib/docker/postgres/postgresql-data

но не знаю какие пути указывать, но как я понимаю, до двоеточия та папка базы, что на локальной машине(предполагаю, что могу указать люую удобную), а то что после, папка базы в контейнере(вот где в контейнере хранятся базы и прочее я не знаю). Если я правильно понимаю, то сервер базы в контейнере, вместо обращения к своей внутренней папке, будет обращаться к локальной(той что до двоеточия)и таким образом все данные которые попадают в контенер будут сохранены на локале. Поправьте если я неправильно понял.


Ответы (1 шт):

Автор решения: Pak Uula

Собственно, ошибка не в докере, а в том, как запускается клиент:

connection to server on socket "/var/run/postgresql/.s.PGSQL.5432"

это юникс сокет, а не IP.

Добавьте в командную строку ip адрес psql -h 127.0.0.1 -U postgres

Теперь про подключение тома. В postgres@latest базы данных лежат в каталоге /var/lib/postgresql/data/, поэтому для подключения локальной базы, нужно мапить так: -V /path/to/db/on/host:/var/lib/postgresql/data/

→ Ссылка