web-dev-qa-db-ja.com

Dockerコンテナに属するネットワークインターフェイスを確認する

Dockerはこれらの仮想イーサネットインターフェースを作成しますveth[UNIQUE ID]ifconfigにリストされています。どのインターフェイスが特定のDockerコンテナに属しているかを確認するにはどうすればよいですか?

TCPトラフィックを聞きたい。

18
Mahoni

インターフェイスを見つけるには
私の場合、コンテナから値を取得するのは次のようなものでした(check eth0 to):

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

その後:

$ ip ad | grep 123
123: vethd3234u4@if122: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker_gwbridge state UP group default

確認する tcpdump -i vethd3234u4


http://lxr.free-electrons.com/source/Documentation/ABI/testing/sysfs-class-net からの不思議なiflinkに関するリファレンス:

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.
15
pbaranski

提供された回答(私にとってはうまくいきました)に基づいて、私はこの単純なbashスクリプトを作成しました:

#!/bin/bash

export containers=$(Sudo docker ps --format "{{.ID}}|{{.Names}}")
export interfaces=$(Sudo ip ad);
for x in $containers
        do
                export name=$(echo "$x" |cut -d '|' -f 2);
                export id=$(echo "$x"|cut -d '|' -f 1)
                export ifaceNum="$(echo $(Sudo docker exec -it "$id" cat /sys/class/net/eth0/iflink) | sed s/[^0-9]*//g):"
                export ifaceStr=$( echo "$interfaces" | grep $ifaceNum | cut -d ':' -f 2 | cut -d '@' -f 1);
                echo -e "$name: $ifaceStr";
done
0
兜甲児