#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. Спасибо за ответы