2016-10-12 3 views
0

Я пытаюсь понять, как работает мостовой интерфейс docker0.Как мост docker0 работает внутри хоста?

  • Когда демон docker запускается, он создает модемное устройство docker0;
  • Когда контейнер запускается, он создает интерфейс Vthn и связываются с docker0

говорит, мы выдаем команду пинга внутри контейнера к внешнему хосту

[[email protected] app]# ping 130.49.40.130 
PING 130.49.40.130 (130.49.40.130) 56(84) bytes of data. 
64 bytes from 130.49.40.130: icmp_seq=1 ttl=52 time=11.9 ms 

так apprently моего хозяин eth0 получает этот ответ, но как этот пакет отправляется в контейнер? Есть вопросы по серверу.

  • eth0 и docker0 не являются мостами, как же docker0 получает пакеты от eth0?
  • даже если docker0 получил пакеты, как он работает, внутренне отправляя пакеты в vth0? он внутренне поддерживает некоторые Карты, чтобы он мог конвертировать пакеты между разными MAC-адресами?
  • Как здесь связаны iptables?

Приветствия.

+0

http://woosley.github.io/2017/07/25/understand-docker-iptables-rules.html –

ответ

1

Docker не делает ничего конкретно магического здесь, и ваш вопрос на самом деле не зависит от докеры.

docker0 - это всего лишь сетевой мост. Как только этот мост будет создан (после запуска службы докеров), вы можете предположить, что к вашей сети присоединилась новая машина (в данном случае в форме VM/docker).

При проверке контейнера докеров с хоста или наоборот вы в основном пинговаете другую машину внутри своей сети.

Что касается докеров, если вы не создали новый сетевой интерфейс (что я сомневаюсь, так как вы пинговали eth0), вы в основном пинговали себя.

Если запустить контейнер как:

docker run -i -t --rm -p 10.0.0.99:80:8080 ubuntu:16.04

Вы рассказываете докер создать NAT правила в IPTables пересылать любые пакеты, идущие к 10.0.0.99:80 вашему Docker контейнера на порту 8080.

При запуске контейнера, как:

docker run -i -t --rm -p --net=host ubuntu:16.04

Тогда вы говорите контейнер докер должны иметь один и тот же сетевой стек как хозяин, так что все пакеты собираются принять также приехать в вашу Docker контейнер через мост docker0.

+0

Да, мой вопрос на самом деле не такой докер. Я все еще пытаюсь выяснить, что произошло, когда контейнер докеров загружает внешний хост. В боковой части контейнера, если пакет хочет получить и вернуть обратно, как он передает интерфейс хоста и преобразовывается в контейнер докера? –

Смежные вопросы