Docker主机侧veth接口非docker0端及容器eth0主机端查看方法
如何在Docker主机上追踪容器的eth0接口
嘿,我来帮你拆解这个问题,一步步理清Docker网络的这些细节:
为什么ip netns show返回空?
Docker默认不会把容器的网络命名空间(netns)挂载到主机的标准/var/run/netns目录下,所以直接用ip netns show是看不到的。要访问容器的netns,你需要手动关联它:
- 先获取目标容器的PID:
docker inspect -f '{{.State.Pid}}' <容器ID或名称> - 将容器的netns挂载到标准路径(这样
ip netns就能识别它):sudo ln -s /proc/<上一步得到的PID>/ns/net /var/run/netns/<自定义容器标识> - 现在你就能用
ip netns操作这个容器的网络命名空间了,比如查看容器内的网卡:sudo ip netns exec <自定义容器标识> ip addr
查看容器eth0对应的主机侧veth接口
有几种简单的方法可以找到容器eth0在主机上的对应veth设备:
方法1:通过Docker inspect直接关联
先拿到容器eth0的MAC地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' <容器ID或名称>
然后在主机上执行ip link show,输出里会显示所有网卡的MAC地址,找到和容器eth0匹配的veth设备(主机侧veth与容器内eth0是配对的虚拟网卡,MAC地址会对应关联)。
方法2:通过docker0网桥查看关联
因为容器的eth0通过veth对连接到docker0网桥,直接查看网桥的连接设备就能找到对应关系:
sudo bridge link show docker0
输出里每个连接到docker0的veth接口都会标注对应的容器PID(比如Pid: 1234),你可以通过PID对应到目标容器,同时就能看到主机侧的veth名称(比如vethabcd)。
关于主机侧veth接口的另一端
你提到的“主机侧veth接口中除docker0之外的部分”,其实就是veth虚拟网卡对的另一端——它存在于容器的独立网络命名空间中,也就是容器内部的eth0接口。veth设备的本质就是一对“虚拟管道”:一端在主机的默认网络命名空间(连接到docker0网桥),另一端在容器的专属网络命名空间(作为容器的默认网卡),两者直接连通,实现容器和主机/其他容器的网络通信。
内容的提问来源于stack exchange,提问作者Silk0vsky
相关产品推荐
相关产品推荐

