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, он может работать некоторое время, но часто всего на несколько минут. Обычно перезагрузка дает нам по крайней мере час работы, прежде чем она остановится... Так странно...