Как я могу получить доступ к службе, работающей на WSL2, из контейнера Docker?

Я использую Windows 10 1909 и установил WSL2, используя Ubuntu 20.04, версию докера 19.03.13-beta2, установив версию Docker для Windows Edge с использованием опции WSL2. Интеграция работает отлично, но у меня есть одна проблема, которую я не могу решить.

На экземпляре WSL2 работают службы, открывающие некоторые порты (3000, 3001, 3002, ...). Из одного из контейнеров докеров мне нужно получить доступ к службам для определенного сценария разработки (API-шлюз), и я не могу приступить к работе.

Я попытался использовать IP-адрес WSL2 напрямую, но затем время ожидания соединения прервалось. Я также пробовал использовать host.docker.internal, который разрешает что-то другое, кроме IP-адреса WSL2, но это все еще не работает.

Есть ли особый трюк, который мне нужно использовать, или такая маршрутизация в настоящее время не поддерживается, но будет, или это по какой-то другой причине невозможно?

Это иллюстрирует то, чего я пытаюсь достичь:

Доступ к службам WSL2 из контейнера докеров

Другие маршруты работают - то есть я могу получить доступ ко всем портам служб, поступающим из процессов node.js внутри WSL2, из браузера Windows, а также могу получить доступ к открытым портам служб из контейнеров как изнутри WSL2, так и из Windows. Это просто недостающее звено, которое я не могу заставить работать.


person donmartin    schedule 15.09.2020    source источник
comment
Клянусь, ничего не менял, но сегодня работает!   -  person donmartin    schedule 16.09.2020
comment
Я также клянусь, что ничего не менял, и это работало для меня в прошлом, но сегодня это больше не работает ... (Я отчитаюсь, если выясню, что я сделал ...)   -  person Addshore    schedule 14.06.2021


Ответы (1)


Для чего это стоит: этот сценарий работает, если вы используете IP-адрес подсистемы WSL2.

Это не работает, если вы используете host.docker.internal - этот псевдоним DNS определен в контейнерах, но он сопоставляется с IP-адресом хоста Windows, а не хоста WSL2, и эта маршрутизация обратно внутри WSL2. хост не работает.

Причина, по которой это (возможно, временно) не сработало, несколько неясна - я вернусь к этому ответу, если проблема должна появиться снова, и мне удастся отследить, в чем могла быть настоящая проблема.

person donmartin    schedule 18.09.2020
comment
Я использую host.docker.internal внутри своего приложения, но я не запускаю контейнер через docker run --add-host=host.docker.internal:host-gateway .... Если я это сделаю, я не смогу подключиться изнутри контейнера к внешнему. Просто запустите контейнер через docker run -p 8080:8080 <etc> - person Michael Lossagk; 31.12.2020