2016-02-24 12 views
4

У меня возникли некоторые проблемы с попыткой напрямую подключить контейнеры докеров к сети хоста.Подключить контейнеры докеров непосредственно к подсети хоста

Конфигурация выглядит следующим образом: Один хост имеет один интерфейс (eth0) в подсети, скажем, 10.0.15.0/24. IP на eth0 составляет 10.0.15.5/24. Я настроил мост docker0 для использования подсети в подсети, доступной из eth0, а именно 10.0.15.64/26. Таким образом, докер может использовать IP-адреса из этого/26, чтобы предоставить контейнерам, и я хочу, чтобы контейнеры были напрямую доступны из остальной сети. Мост докера также имеет набор IP, а именно 10.0.15.65/26.

Когда контейнер создан, он получает IP, например 10.0.15.66/26. Теперь, я сделал некоторые испытания с пингованием:

  • ничего по сети может 10.0.15.5 (eth0 хоста)
  • что-либо в сети может свистеть 10.0.15.65 (docker0 моста хозяина)
  • хост может свистеть 10.0.15.66 (IP контейнера)
  • контейнер может свистеть ничего в сети
  • ничего, кроме хозяина может не пинг контейнер на 10.0.15.66

IP-экспедиторская включен

[[email protected]~]# cat /proc/sys/net/ipv4/ip_forward 
1 

Что я здесь отсутствует? Контейнеры, подключенные к мосту docker0, должны быть доступны из сети, я думаю.

Ожидаемое поведение Контейнеры должны быть pingable из любого места в сети, так же, как docker0 моста и т.д.

Любые мысли или помощь будет высоко ценится!

+0

Поскольку вы уже манипулируете правилами iptables, я бы сначала попытался добавить '--iptables = false' в командную строку Docker demon, чтобы он не добавлял никаких правил, которые бы противоречили тому, что вы пытаетесь сделать. – Michael

ответ

2

Наконец-то выяснилось, почему он не работает для нас. Машина, на которой я запускал контейнер докера, была виртуальной машиной на гипервизоре. Гипервизор принимает только один MAC-адрес от сетевого адаптера, подключенного к виртуальной машине. Другими словами, сетевой адаптер в виртуальной машине не был установлен в беспорядочный режим.

Что я сделал, чтобы обойти эту проблему, просто использовали машину с голым металлом. Другим решением было бы вручную установить NIC в режим promiscuous, поэтому он принимает все пакеты, а не только пакеты для своего собственного MAC.