如何找出docker跟宿主机网卡的对应关系

昨天排查了一个docker的网络问题,从容器里访问宿主机端口不通,后来经排查,客户网络关闭了firewalld,但是启用了iptables,在排查过程中,总结了一下如何找出docker和veth的对应关系 参考内容:https://github.com/micahculpepper/dockerveth.git

具体思路如下:

  • docker网络是隔离的,在docker inspect命令里 可以看到容器对应的实际pid:
docker inspect --format '{{.State.Pid}}'
  • 在/proc/$pid/ns下可以看到对应的namespacesId 为配合ip netns 命令使用,需要在/var/run/netns/目录下创建软链(man ip netns可查看具体原因)
 ln -s /proc/$pid/ns/net  ns-$pid
  • 查询6065 ns下的网卡信息 如下命令获取
ip netns exec ns-6065 ip addr show type veth

35: eth0@if36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
   link/ether 02:42:ac:15:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0
   inet 172.21.0.3/16 brd 172.21.255.255 scope global eth0
      valid_lft forever preferred_lft forever
  • 从上一步过滤出网卡id (35),然后到宿主机上过滤出对应的veth(@if35)
36: veth1069320@if35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-31c2bbb74464 state UP group default
   link/ether be:ce:f0:a6:43:7e brd ff:ff:ff:ff:ff:ff link-netnsid 1