ip netns命令操作docker容器的网络
(1)ip netns相关命令1.增加虚拟网络命名空间 ip netns add ns 该命令会在/var/run/netns目录下创建ns网络命名空间名2.显示所有的虚拟网络命名空间root@wade-ThinkCentre-E73:~# ip netns listns 也可通过查看/var/run/netns目录下的文件来list,结果一样
·
(1)ip netns相关命令
1.增加虚拟网络命名空间
ip netns add ns
该命令会在/var/run/netns目录下创建ns网络命名空间名
2.显示所有的虚拟网络命名空间
root@wade-ThinkCentre-E73:~# ip netns listns
也可通过查看/var/run/netns目录下的文件来list,结果一样
root@wade-ThinkCentre-E73:~# ls /var/run/netns/ns
3.进入虚拟机网络环境
ip netns exec ns bash #打开虚拟网络环境ns的bash窗口
ip addr #显示所有虚拟网络环境的设备
exit #退出该网络虚拟环境
4.增加一对veth虚拟网卡
ip link add type veth
5.将veth0添加到ns虚拟网络环境
ip link set veth0 netns ns
6.将虚拟网卡veth1改名并添加到net1虚拟网络环境中
ip link set dev veth1 name net1-bridge netns net1
7.设置虚拟网络环境ns的veth0设备处于激活状态
ip netns exec ns ip link set veth0 up
8.为虚拟网络环境ns的veth0设备增加IP地址
ip netns exec ns ip address add 10.0.1.1/24 dev veth0
(2)/proc/[pid]/ns文件
从3.8版本的内核开始,用户就可以在/proc/[pid]/ns文件下看到指向不同命名空间(namespace)号的文件,[4026532791] 即为namespace号。root@wade-ThinkCentre-E73:/proc/5787/ns# ll
总用量 0
dr-x--x--x 2 root root 0 8月 31 16:13 ./
dr-xr-xr-x 9 root root 0 8月 31 12:41 ../
lrwxrwxrwx 1 root root 0 8月 31 16:36 ipc -> ipc:[4026532791]
lrwxrwxrwx 1 root root 0 8月 31 16:36 mnt -> mnt:[4026532915]
lrwxrwxrwx 1 root root 0 8月 31 16:13 net -> net:[4026532845]
lrwxrwxrwx 1 root root 0 8月 31 16:36 pid -> pid:[4026532917]
lrwxrwxrwx 1 root root 0 8月 31 16:36 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 8月 31 16:36 uts -> uts:[4026532916]
如果两个进程指向的namespace编号相同,就说明他们在同一个namespace下。/proc/[pid]/ns的另外一个作用是,一旦文件被打开,只要打开的文件描述符(fd)存在,那么就算PID所属的所有进程都已经结束,创建的namespace就会一直存在。那如何打开文件描述符呢?把/proc/[pid]/ns目录挂载起来或者软链接就可以达到这个效果,命令如下。
挂载
# touch ~/net
# mount --bind /proc/$pid/ns/net ~/net
软链接
#ln -sf /proc/$pid/ns/net "/var/run/netns/${name}"
在使用docker的过程中我们可以使用如下命令达到操作容器的网络的目的
ln -sf /proc/$pid/ns/net "/var/run/netns/${container_name}" //$pid 为docker容器pid
ip netns exec "${container_name}" `command`
更多推荐
已为社区贡献3条内容
所有评论(0)