Postgres, работающий в WSL, внезапно разрывает сеть и выдает сообщение «Соединение отклонено»

У нас в команде есть два ноутбука, с которыми возникают одинаковые проблемы, но они ведут себя немного по-разному, поэтому я рассмотрю это со своей точки зрения...

Оба ноутбука работают под управлением обновленной Windows 11 с Ubuntu 20.04 в WSL2.

После перезагрузки все работает нормально, настройка разработки такая:

  • DBbeaver для Windows
  • Бессонница/Почтальон в Windows
  • Docker Desktop в Windows с WSL2 в качестве «среды выполнения»
  • Postgres v12 на WSL на стандартном порту 5432
  • Контейнер Docker прослушивает порт 8080, подключаясь к Postgres (на WSL)
  • Подключение приложения Node.js к Postgres и контейнеру Docker (http 8080). Приложение node.js предоставляет порт 1337, на который Insomnia (из Windows) отправляет запросы.

Итак, какое-то время все работает нормально, иногда несколько часов, а иногда всего несколько минут.

Замечаем, что Insomnia (или Postman на другом ноуте) вдруг выдает ошибку приложения. Это не тайм-аут, ошибка вылетает сразу.

Проверяю журналы, которые я вижу в приложении node.js, которые оно дает.connect ECONNREFUSED 127.0.0.1:5432(это приложение node.js, пытающееся получить доступ к Postgres).

Затем, попробовав контейнер Docker на порту 8080 (localhost:8080) из Insomnia (который также работал раньше), я получаюError: Couldn't connect to server. Если вместо этого я перейду на IP-адрес WSL, например172.27.128.25:8080, я получаю ответ от контейнера.

Таким образом,localhost:1337работает, ноlocalhost:8080нет.

DBeaver, подключающийся к Postgres на WSL, также хорошо работал, используя обаlocalhostи172.27.128.25до «сбоя», но после сбоя DBeaver выдаетConnection refused: connect.

При проверке портов прослушивания как в Windows, так и в WSL все выглядит нормально, приложение, контейнер и Postgres прослушивают (8080, 1337 и 5432), и «конфликтов» нет.

Подключение «локально» на WSL2 к Postgres работает нормально (su - postgres), и я могу запросить БД, используяpsql.

Ресурсы на ноутбуках в порядке.

Что мы можем проверить? Я пытался следить за ноутбуками и проверял средство просмотра событий Windows, чтобы узнать, происходит ли что-то конкретное, когда он перестает работать, но мне не удалось ничего найти... Это просто происходит от одного запроса API к другому. ..

Мы уже пытались отключить быстрый запуск для Windows и исправление/проверку DNS для WSL, которые являются распространенными проблемами при доступе к сети/локальному хосту. Попытка сбросить сеть, очистить кэш DNS и т. д. не помогает восстановить соединение, равно как и перезапуск WSL, только перезагрузка очищает его.

Однако иногда, если я остановлю Docker Desktop, выключу WSL, затем запущу WSL, а затем снова Docker, он может работать некоторое время, но часто всего на несколько минут. Обычно перезагрузка дает нам по крайней мере час работы, прежде чем она остановится... Так странно...

0 ответов

Другие вопросы по тегам