Как я могу пропинговать локальный докер-контейнер с внешнего хоста, используя сеть Macvlan?

Цель: предположим, что два хоста A & B. контейнер x в A должен быть в состоянии пропинговать от хоста B так, чтобы этот контейнер x присутствовал в той же сети, что и A & B, и имел свой собственный IP-адрес.

Docker предлагает два типа сетевых решений для многоузловой сети 1) Оверлейная сеть с / без Docker Swarm 2) Сеть Macvlan.Я хотел бы знать для сетей Macvlan 2-го типа, как я могу достичь цели

1 ответ

Создайте сеть macvlan под названием my-macvlan-net:

$ docker network create -d macvlan \
  --subnet=172.16.86.0/24 \
  --gateway=172.16.86.1 \
  -o parent=eth0 \
  my-macvlan-net

Запустите пример контейнера alpine и подключите его к сети my-macvlan-net:

$ docker run --rm -dit \
  --network my-macvlan-net \
  --name my-macvlan-alpine \
  alpine:latest \
  ash

Проверьте настройки сети контейнера:

$ docker exec my-macvlan-alpine ip addr show eth0

9: eth0@tunl0: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:10:56:02 brd ff:ff:ff:ff:ff:ff
inet 172.16.86.2/24 brd 172.16.86.255 scope global eth0
   valid_lft forever preferred_lft forever

$ docker exec my-macvlan-alpine ip route

default via 172.16.86.1 dev eth0
172.16.86.0/24 dev eth0 scope link  src 172.16.86.2

Работа в сети с использованием сети macvlan

Когда службы работают, вы можете прикрепить их для отладки с помощью

docker exec -ti some-service.1.lz3j7mqb1ux4jp5cwe87gpiok sh

вам нужно выяснить название сервиса с docker ps,

Затем вы можете попробовать пропинговать другой сервис. Но это будет работать только тогда, когда оба сервиса подключены к одной и той же оверлейной сети, которая не является входной.

docker network create -d overlay dev
docker service create --network dev --name a ...
docker service create --network dev --name b ...

Тогда ты можешь ping a от б и ping b из.

Другие вопросы по тегам