Django не удается подключиться к Docker-контейнеру PostgreSQL, используя имя хоста (WSL)

Я столкнулся с проблемой, когда мое приложение Django, работающее на Windows Subsystem for Linux (WSL), не может подключиться к базе данных PostgreSQL, запущенной в контейнере Docker.

Ошибка, которую я получаю в Django, выглядит так:

django.db.utils.OperationalError: could not translate host name "postgres" to address: Name or service not known

Я запускаю контейнер PostgreSQL с помощью следующей команды Docker:

docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres

А это мое окружение, изменяемое в django:

DATABASE_URL=postgres://postgres:postgres@postgres:5432/postgres

Как я могу это исправить?

Просто измените URL (напишите localhost:5432):

DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres

Потому что вы запускаете django application в WSL и PostgreSQL container в Docker на хост-машине, поэтому django application не сможет соединиться с 'PostgreSQL' с помощью container name.

Так, вы можете использовать loopback IP-адрес хост-машины (127.0.0.1 или localhost)

DATABASE_URL=postgres://postgres:postgres@localhost:5432/postgres

или IP-адрес хост-машины в локальной сети (просмотр через команду ipconfig).
Выглядит так:

DATABASE_URL=postgres://postgres:postgres@192.168.x.x:5432/postgres
Вернуться на верх