gscraft
@gscraft
Программист, философ

Как заставить Windows увидеть сеть из WSL2 в режиме host?

Интересная особенность, решений которой пока не нашел (и такой вопрос в сети возникал неоднократно, например). Если машина находится внутри WSL2, скажем, Ubuntu под Windows, и создать контейнер с открытым портом, он доступен из Windows, но если сделать режим хоста, Windows в упор не видит созданную сеть. К примеру, так localhost откроется в Windows:
containers:
  nginx:
    image: nginx:latest
    ports:
       - '80'

А так, нет:
containers:
  nginx:
    image: nginx:latest
    network_mode: host
    expose:
       - '80'

Вроде бы решают установкой Docker внутрь WSL2, но у меня ряд проектов на рабочей машине и не хотелось бы все перестраивать.

PS Можно сделать проброс с помощью SSH, можно настроить сетевой интерфейс Hyper-V / WSL2 в режим моста, можно при каждом запуске выполнять проброс портов (мне не удалось завести, но пишут, что это возможно). Одно не ясно, почему в режиме закрытой сети и открытыми портами из Docker работает, но с открытием сети перестает работать. Docker имеет свои механизмы проброса?

PS Понятно, что шарить сеть необязательно, но в одном из старых проектов, обернутых в Docker, не удалось решить связь между контейнерами, где веб-приложения общаются между собой посредством nginx — постоянные вылеты на SSL, а соответствующий рефакторинг на данном этапе невозможен. И если на рабочей машине с Linux полный порядок, то в Windows приходится работать внутри WSL2.
  • Вопрос задан
  • 398 просмотров
Решения вопроса 1
gscraft
@gscraft Автор вопроса
Программист, философ
Эта задача не имеет адекватного решения. Docker для Windows имеет особую реализацию, собственную сеть, и режим хоста означает, что приложение будет работать не в сети WSL2 / Windows, а в сети самого Docker. Тогда как открытие портов создает туннели для сетей WSL2 и Windows. Единственный способ заставить это работать, это каждый раз при запуске контейнеров вручную делать туннель, что едва ли просто сделать, поскольку, опять-таки, согласно документации "This interface is actually within the virtual machine".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы