在前一篇文章提到容器的网络是通过 network namespace 隔离的,但是你却找不到 Docker 创建的 netns(K8S 同理):
这是因为 Docker 并不会在 /var/run/netns/...
下创建文件。下面讲进入 Docker 容器的 netns 的方法。
获得容器 ID
得到容器 PID
1
|
$ docker inspect --format '{{ .State.Pid }}' <CONTAINER_ID>
|
进入 namespace
1
2
3
4
5
|
$ nsenter -t <CONTAINER_PID> -n ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
...
16: eth0@if17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue state UP group default
...
|
找到 veth 对子
回忆一下,veth
一个头在容器 namespace 里,一个头在 root namespace 里,在容器 namespace 里可以看到网卡: eth0@if17
,这个 if17
就是在 root namespace 的另一头。
用下面命令找到:
1
2
3
|
# ip link | grep -A1 ^17
17: vethweplb3f36a0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1376 qdisc noqueue master weave state UP mode DEFAULT group default
link/ether 72:1c:73:d9:d9:f6 brd ff:ff:ff:ff:ff:ff link-netnsid 1
|
参考资料
评论