2016-06-16 6 views
8

Docker создает эти виртуальные интерфейсы Ethernet veth[UNIQUE ID], перечисленные в ifconfig. Как узнать, какой интерфейс принадлежит определенному контейнеру докеров?Узнайте, какой сетевой интерфейс принадлежит контейнеру докеров

Я хочу прослушать tcp-трафик.

+0

Похоже, это открытый вопрос здесь https://github.com/docker/docker/issues/14666 и есть некоторые обходные пути. Я не очень хорошо разбираюсь в сетевом взаимодействии, и я не совсем понимаю эти обходные пути, поэтому я решил просто фильтровать хост при использовании tcpdump. Работает на меня. Возможно, будет работать для вас, если вы также используете tcpdump или если ваш инструмент имеет схожие фильтры. –

ответ

5

Чтобы найти интерфейс
В моем случае получать значение из контейнера было как (проверьте eth0 к):

$ docker exec -it my-container cat /sys/class/net/eth1/iflink 
123 

А потом:

$ ip ad | grep 123 
123: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP group default 

Проверить с tcpdump -i vethd3234u4


Ссылка на mysteriou s iflink из http://lxr.free-electrons.com/source/Documentation/ABI/testing/sysfs-class-net:

150 What:   /sys/class/net/<iface>/iflink 
151 Date:   April 2005 
152 KernelVersion: 2.6.12 
153 Contact:  [email protected] 
154 Description: 
155     Indicates the system-wide interface unique index identifier a 
156     the interface is linked to. Format is decimal. This attribute is 
157     used to resolve interfaces chaining, linking and stacking. 
158     Physical interfaces have the same 'ifindex' and 'iflink' values. 
+1

Не работает для меня. iflink в контейнере 14. «ip ad» на хосте не имеет интерфейса 14. «ip ad» в контейнере. Докерная версия 17.03.1-ce. –

+0

Я замечаю, что интерфейс 12 в моем контейнере - это интерфейс 13 на гостевом компьютере. А интерфейс 14 в моем другом контейнере - это интерфейс 15 на гостевой. Я попытался захватить в wirehark (работает на хосте) и понял, какой из них был основан на трафике. –