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