Getaddrinfo failed: почему Python не может найти localhost?
Проблема
При попытке подключения к PostgreSQL с использованием asyncpg возникает ошибка: socket.gaierror: [Errno 11001] getaddrinfo failed
Что важно:
1. Параметры подключения (user, password, db, host, port) — верные
2. PostgreSQL работает и доступен (в Docker-сети всё ок)
3. Подключение снаружи (например, из PowerShell или миграциями через Alembic) — вызывает ошибку
4. Файл hosts содержит оба нужных значения:
127.0.0.1 localhost
::1 localhost
Мои гипотезы
1. DNS или разрешение имён внутри Python/asyncpg
2. Возможно, getaddrinfo() не может получить IP по имени localhost даже с корректным hosts
3. Проблема может быть связана с конфигурацией самой системы или Python 3.12
4. Баг в Windows DNS-стеке или антивирус/фаервол
❓Вопрос
Как можно исправить ситуацию, когда localhost не резолвится корректно в asyncpg, несмотря на корректный hosts?
Какие есть способы заставить getaddrinfo() работать корректно в Windows + Python 3.12?
Если я правильно понял у вас 2 контейнера: в одном приложение, в другом база данных.
Если так, то во первых проверьте, находятся ли они в одной сети.
Если сеть у вас типа bridge, то обращаться нужно не по localhost - это адрес самого контейнера, где работает приложение, а не адрес базы данных. Обращаться нужно по имени контейнера, тогда докер сам будет разрешать их адреса
Есть еще вариант оба контенера запустить в сети хоста и спокойно обращаться по localhost, но подход имеет кучу минусов
PostgreSQL работает и доступен (в Docker-сети всё ок)
Если я правильно понял у вас postgres в докер контейнере
Тогда вам не на localhost надо подключатся а к ip контейнера или по днс имени контейнера
Localhost это внутренний адрес самой машины а вам надо подключится к виртуальной сети этой машины