Подключение к postgres поднятому в докере
docker-compose.yml:
version: "3.9"
services:
postgres:
image: postgres:15
environment:
POSTGRES_DB: "db"
POSTGRES_USER: "user"
POSTGRES_PASSWORD: "password"
ports:
- "5432:5432"
запустим:
docker-compose up
Я думал, что после проделанных манипуляций я смогу подключиться к postgress указав в качестве хоста localhost. (Под подключением я имею ввиду подключение не заходя в докер контейнер) Однако такой способ не сработает, при подключении будет ошибка
connection to server at "localhost" (::1), port 5432 failed: FATAL: role "user" does not exist
Погуглив я нашел правильный способ подключения - не надо использовать localhost, вместо этого надо использовать адрес, полученный с помощью команды
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
Хоть подключиться у меня и получилось, осталось непонимание ситуации. Почему не работает подключение по localhost? Почему работает второй описанный мной способ? В чем вообще смысл команды ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1?
У меня macos
Ответы (1 шт):
Что бы подключиться к базе созданной в docker-e из вне, нужно прокинуть порт в сервиce docker-compose:
ports:
- "13000:5432"
Теперь будет доступно подключение к базе внутри контейнера - localhost:13000
Test:
import psycopg2
connection = psycopg2.connect(
dbname='db',
user='user',
password='password',
host='localhost',
port=13000
)
cursor = connection.cursor()
cursor.execute('SELECT datname FROM pg_database;')
print(*cursor.fetchall())
cursor.close()
connection.close()
Output:
('postgres',) ('db',) ('template1',) ('template0',)