ip netns命令操作docker容器的网络

原创 2016年08月31日 16:22:52

(1)ip netns相关命令

1.增加虚拟网络命名空间

 
ip netns add ns
   该命令会在/var/run/netns目录下创建ns网络命名空间名


2.显示所有的虚拟网络命名空间

root@wade-ThinkCentre-E73:~# ip netns list
ns

  也可通过查看/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`

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ip netns 常用的namespace的命令

netns是在linux中提供网络虚拟化的一个项目,使用netns网络空间虚拟化可以在本地虚拟化出多个网络环境,目前netns在lxc容器中被用来为容器提供网络。 使用netns创建的网络空间独立于...
  • ztejiagn
  • ztejiagn
  • 2014年07月03日 14:18
  • 10616

深入理解openstack网络架构(1)

原文地址: https://blogs.oracle.com/ronen/entry/diving_into_openstack_network_architecture前言openstack网络功能...

[docker]docker的四种网络方式

声明:本博客欢迎转发,但请保留原作者信息!博客地址:http://blog.csdn.net/halcyonbaby内容系本人学习、研究和总结,如有雷同,实属荣幸!bridge方式(默认)Host I...

docker安装升级linux内核(2.6.32->3.10.81),安装成功!

升级linux内核(2.6.32->3.10.81),安装docker1.内核升级环境准备 #查看已经安装的和未安装的软件包组,来判断我们是否安装了相应的开发环境和开发库; yum group...
  • samxx8
  • samxx8
  • 2015年07月02日 15:33
  • 13522

根据PID号判断所属的容器

目标 原理 实验 脚本最近有个需求是根据PID号判断所属的容器,也就是说首先要根据docker创建的容器的名字获取namespace序号。原本的想法是从docker的源码中创建namspace的代码,...
  • lwyeluo
  • lwyeluo
  • 2016年07月01日 17:21
  • 2202

Linux内核-容器之namespace

1. 介绍简单玩了下Linux kernel为容器技术提供的基础设施之一namespace(另一个是cgroups),包括uts/user/pid/mnt/ipc/net六个(3.13.0的内核). ...

为什么docker创建的网络命名空间在ip netns 不可见

创建docker容器后本来应该有新的命名空间(如果有独立网络的话),那么可以通过 ip netns 命令查看到命名空间,但是实际上却看不到。 查过资料才发现,ip netns 只能查看到 /var/...

Linux进程简介

在一台服务器上面看到有如下这么多类似的进程:     2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd       ...

ip netns相关命令

1.增加虚拟网络命名空间   ip netns add net0   2.显示所有的虚拟网络命名空间 EULER:~ # ip netns list net0 也可通过查看/va...

ip netns相关命令

1.增加虚拟网络命名空间   ip netns add net0   2.显示所有的虚拟网络命名空间 EULER:~ # ip netns list net0 也可通过查看/va...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ip netns命令操作docker容器的网络
举报原因:
原因补充:

(最多只允许输入30个字)