Как настроить конечную точку локальной сети из контейнера Docker, работающего в Windows?

#windows #docker

#Windows #docker

Вопрос:

Я использую Windows 10 с WSL2 и установил Docker. Я создаю контейнер Docker, и из этого контейнера могу выполнять ping и ssh для хостов в той же физической локальной сети, что и хост Windows, однако arping просто падает на лицо.

Пример запуска контейнера из командной строки в Windows:

 user@HOST C:Usersuser>wsl --list --verbose
* Ubuntu                 Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2
user@HOST C:Usersuser>bash
user@host:~$ sudo docker run -it --rm alpine:3.12.0
/ # ping -c1 -w1 192.168.32.21
PING 192.168.32.21 (192.168.32.21): 56 data bytes
64 bytes from 192.168.32.21: seq=0 ttl=37 time=1.588 ms

--- 192.168.32.21 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.588/1.588/1.588 ms
/ # arping -c1 -w1 192.168.32.21
ARPING 192.168.32.21 from 172.17.0.4 eth0
Sent 1 probe(s) (0 broadcast(s))
Received 0 response(s) (0 request(s), 0 broadcast(s))
  

Я попытался запустить контейнер с сетью по умолчанию и ‘—net = host’; те же результаты.

Параметры ‘-c1 -w1’ в приведенном выше примере приведены для краткости. Их удаление приводит к тайм-ауту arping.

Любые предложения / советы будут оценены. Мне действительно нужно, чтобы arping работал из контейнера.

Ответ №1:

Обычно ARP работает только в локальном сегменте локальной сети, к которому подключен клиент, он не будет проходить через какие-либо маршрутизаторы пакетов.

Глядя на полученный вами результат, вы пытаетесь перейти с 172.17.0.4 на 192.168.32.21, которые будут находиться в разных подсетях, поэтому ARP не будет работать.

Комментарии:

1. Правильно. Существуют ли какие-либо обходные пути для Docker в Windows, которые позволили бы ему работать на 192.168.32.0 / 24? Например, в Linux передача ‘—net =host’ позволит arping работать из контейнера, поскольку он имеет доступ к интерфейсам хоста. WSL2 не предоставляет интерфейсы хоста и создает адаптер WSL, который используется контейнером.

2. Я не думаю , что вы можете сделать это с помощью Docker для Windows, я бы рекомендовал, чтобы, если вам нужен контейнер docker в той же локальной сети, что и ваша сеть, используйте Hyper-V для настройки виртуальной машины Linux, подключенной к основной сети, а затем запустите на ней Docker engine и используйте --net=host в контейнере,итак, он появляется в сети хоста.

3. Что ж, это печальная новость. Думаю, мне придется развернуть контейнер arping на хосте Linux и добавить немного клея для переноса результатов в контейнеры на стороне Windows. Спасибо за ответы