Подключение к Postgres, работающему в Windows, из django, работающего на WSL

Я в основном разрабатываю для Windows, но я тестирую свое приложение с помощью WSL, так как я отправлю его на сервер Linux. Моя текущая проблема связана с подключением приложения django, работающего на WSL, к postgres, работающему в Windows. Во многих статьях объясняется, как подключиться к postgres, работающему на WSL, но не наоборот.


person Timothy Oliver    schedule 12.05.2021    source источник


Ответы (1)


Я не смог протестировать все это, поэтому нам может потребоваться настроить несколько элементов в этом ответе, но вот мои рекомендуемые шаги:

  • Во-первых, если это экземпляр WSL2, mDNS должен работать для доступа к IP-адресу хоста Windows из WSL. Для начала попробуйте ping $(hostname).local изнутри WSL.

  • Если это разрешает IP-адрес, то это шаг 1. Если нет, то есть альтернативы (см. этот ответ).

  • Я предполагаю, что пинг не вернется из-за брандмауэра. Вам понадобится правило, чтобы включить его. Из административной оболочки PowerShell New-NetFirewallRule -DisplayName "WSL Ping" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow -Protocol ICMPv4. Затем попробуйте ping $(hostname).local снова. Удалите правило с помощью Remove-NetFirewallRule -DisplayName "WSL Ping"

  • Если это сработает, то у вас действительно есть ответ о том, как получить доступ к PostgreSQL - настройте правило брандмауэра для этого интерфейса. Должно получиться что-то вроде New-NetFirewallRule -DisplayName "WSL PostgreSQL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow -Protocol TCP -LocalPort 5432.

  • Тогда вы сможете получить к нему доступ из приложения Django в WSL, используя адрес {computername} .local.

person NotTheDr01ds    schedule 13.05.2021
comment
Спасибо. Это сработало. Однако мне пришлось сделать некоторые дополнительные шаги. Мне пришлось изменить IP-адрес базы данных хоста в django на разрешенный IP-адрес. Еще у меня есть django.db.utils.OperationalError: FATAL: no pg_hba.conf entry for host "<ip address>", user "<user>", database "<database name>", SSL off. Я решил это, добавив разрешенный IP-адрес в pg_hba.conf. - person Timothy Oliver; 14.05.2021
comment
Круто - приятно слышать. Просто любопытно на будущее - вы говорите, что имя mDNS не работает, поэтому вам пришлось вместо этого прибегнуть к IP для pg_hab.conf и настроек Django? - person NotTheDr01ds; 14.05.2021