一、进入容器网络命名空间进程操作
step1、docker inspect -f ‘{{.State.Pid}} ‘ 容器id
8848
step2、ls -li /proc/8848/ns/net
/proc/8848/ns/net -> net:[4026536068]
这一步中【】里面的是命名空间的inodeid号,非命名空间文件名。
方法一
Step3、ls -li /var/run/docker/netns/
4026536068 154c4c4c051e
这里显示netns下有一个名为154c4c051e的文件,它的inode号为4026536068
Step4、nsenter --net=/var/run/docker/netns/154c4c4c051e cmd
方法二、
首先通过docker inspect查询到容器主进程pid
然后通过 nsenter -n -t pid cmd 直接向pid下的networknamespace执行命令。
nsenter命令参数-n表示进入networknamespace
-m 表示mount ns
-u 表示utsns
-i 表示ipcns
-p pidns
-u userns
方法三
step4、 ln -s /var/run/docker/netns /var/run/netns 因为默认ip netns命令只操作/var/run/netns下的具名network namespace,所以在这一步创建这个链接。
step5、 ip netns list 这下可以看到有一个名为154c4c4c051e的namespace
step6、ip netns exec 154c4c4c051e cmd
方法四
在方法三基础上step6执行:
ip netns exec 154c4c4c051e bash 可以在该网络命名空间下启动一个bash,在此bash下可以执行任何命令。
exit即可推出此bash
二、将某个网络设置移到容器中
ip link set dev ethxx netns networknamespace名
要想上述命令执行成功,需要先执行ln -s /var/run/docker/netns /var/run/netns
三、向容器中添加一个额外的veth设备
step1、通过上述步骤找到容器的network namespace
step2、添加veth设备对
ip link add veth-1 type veth peer name veth-2
通过ip a命令可以看到出现了两个veth设备:veth1和veth2
step3、通过
ip link set dev veth-1 netns xxxx将veth-1加入到xxx网络命名空间里
在没有ip,ifconfig命令的情况下看网络的接口:
1、通过ls /sys/class/net/ 可以看到当前命名空间所有的网路接口。
2、通过cat /sys/class/net/if-name/address 可以看到if-name网络接口下的mac地址
通过/sys/class/net/if-name/address/statistic/下的信息可以看到关于此网络接口的统计数据
网友评论