LINUX.ORG.RU
ФорумAdmin

Вопрос по сетям и WSL 2

 


0

2

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

Моя сложность с ситуацией, когда докер-хост сам работает в виртуальной машине и есть необходимость обратиться к узлам-контейнерам с виртуализационного хоста (то есть того, что запустил машину, внутри которой докер).

docker-compose создал виртуальные сети и хосты, но всё это внутри виртуальной машины, в данном случае - WSL 2, на хосте Windows.

Вопрос: как обеспечить доступ из «гипервизорного» хоста (Windows) к хостам-контейнерам работающим внутри WSL 2 по ip-адресам той виртуальной сети которую в WSL 2 виртуалке создал docker-compose?

Между хостом (виртуализационным, Windows) и WSL 2 виртуалкой есть сеть, узлы взаимно пингуются.

Другими словами: как сделать, например, 172.18.0.2 относящийся к контейнеру внутри WSL 2 доступным из Windows хоста?

-

(Реально саму Windows я тоже виртуализую - через libvirt, то есть это речь о nested vm, но это к вопросу не относится, потребности обеспечить доступ с «реального» хоста нет).



Последнее исправление: asdpm (всего исправлений: 1)

То, что ты expose’ишь — уже доступно по localhost на хосте. Остальное как минимум можно прокинуть через ssh -L на wsl-хост?

x3al ★★★★★
()

хз, как оно в wsl, а так network_mode: "host" в манифесте заставляет контейнеры пользоваться сетью хоста.

vvn_black ★★★★★
()
Ответ на: комментарий от x3al

Ты про, грубо говоря, вот этот механизм ports: ["80:80"] ? Да, оно работает. Но параллельный запуск другой compose-сборки будет конкурировать за экспозицию этих же портов. Кроме того, насколько, я понимаю, WSL 2 может запустить несколько ВМ и всё это в итоге будет конкурировать за одно пространство портов виндового localhost (который, я так и не понял, чей теперь интерфейс - VM или Windows).

Про ssh -L подумаю.

asdpm
() автор топика
Ответ на: комментарий от vvn_black

Ты имеешь в виду, сделать так, чтобы контейнеры стали узлами определенной сети, в которой и VM и хост? Тогда как им выдавать адреса?

asdpm
() автор топика

Вариант отключить NAT(через опцию com.docker.network.bridge.enable_ip_masquerade=false при создании сети, например) на стороне Docker и настроить маршрутизацию не рассматривается?

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Я очень слабо понимаю в сетях, возможно это то, что нужно, но пока с трудом представляю.

Я полагал, что есть какой-то «простой» способ, сообщить хосту, что, к примеру, «172.18.0.2» - это адрес, работу с которым осуществлять «через» заданную WSL2 VM, связь с которой (VM) есть по, к примеру, «172.23.191.230». Ну а дальше VM уже поймет, что «172.18.0.2» - это в «её» виртуальной докерной сети.

asdpm
() автор топика
Ответ на: комментарий от asdpm

Нет, при этой опции контейнеры будут биндиться на хостовый ip, остаётся только раскидать их по портам, чтоб не конфликтовали.

vvn_black ★★★★★
()
Ответ на: комментарий от asdpm

Я очень слабо понимаю в сетях, возможно это то, что нужно, но пока с трудом представляю.

Блеск и нищета Docker-а - возможность легкого развертывания сети контейнеров тем, кто в сетях вообще не понимает. Не сочти за оскорбление, незнание - не порок.

Я полагал, что есть какой-то «простой» способ, сообщить хосту, что, к примеру, «172.18.0.2» - это адрес, работу с которым осуществлять «через» заданную WSL2 VM, связь с которой (VM) есть по, к примеру, «172.23.191.230»

В Windows для этого есть команда «route». Добавь к ней /? и если есть понимание что такое «шлюз», «маршрут» и «маска подсети»(гугл в помощь) - то всё получится.

Вариант с пробросом порта 80 изначально тухлый, если ты планируешь разворачивать несколько стэков docker-compose с одинаковыми портами. Разве что попрятать это всё за балансировщик(nginx, traefik, выбирай по вкусу) и выкинуть наружу только его порт. Но там своих тонкостей и проблем хватает.

Я бы скорее жестко прибил адреса гвоздями(параметр --ip если вызывать команду docker вручную, параметр для docker-compose.yml навскидку не подскажу).

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.