Я знаю, что докеры по умолчанию создают виртуальный мост docker0
, и вся контейнерная сеть связана с docker0
.Какова связь между docker0 и eth0?
Как показано выше:
- контейнер
eth0
в паре сvethXXX
vethXXX
связана сdocker0
же, как машина связана с переключения
Но что такое соотношение между docker0
и хост eth0
? Более конкретно:
- Когда пакет поступает из контейнера в docker0, как он знает, что будет перенаправлен на eth0, а затем с внешним миром?
- Когда внешний пакет поступает в eth0, почему он пересылается в docker0, тогда контейнер? вместо того, чтобы обрабатывать его или бросать?
Вопрос 2 может быть немного запутанным, я буду держать его там и объяснил немного больше:
- Это возврат пакета, который визируется контейнера (в вопросе 1): с внешней стороны не знает контейнерную сеть, пакет отправляется на хост
eth0
. Как он отправляется в контейнер? Я имею в виду, должно быть место для хранения информации, как я могу ее проверить?
Заранее благодарен!
После прочтения ответа и официальные сетевые статьи, я нахожу следующую диаграмму более точной, что docker0
и eth0
не имеет прямой связи, вместо этого они не могут передавать пакеты:
http://dockerone.com/uploads/article/20150527/e84946a8e9df0ac6d109c35786ac4833.png
Спасибо за объяснение. Могу ли я сказать так: когда пакет доходит до 'docker0' из контейнера, он не знает и не заботится о' eth0'. Вместо этого ядро берет верх и решает, что с ним делать. По умолчанию ядро проверяет таблицу маршрутов, обычно она будет отправляться в 'eth0', затем SNAT, а затем в out-world? – cizixs
Да, стандартная маршрутизация linux и NAT. – Matt