#进入一个已经运行的容器 docker exec -it 61512b362534 bash #执行ip a ip a
会发现有一些接口,这就是这个容器自己的network namespace 退出容器,在宿主机执行ip a 显示出来的是宿主机的network namespace,这2个network namespace是不一样的 再创建第二个容器,2个docker容器的network namespace也是不一样的,他们之前是隔离开的。并且2个容器是可以ping通的
底层原理
(1)创建network namespace
#创建2个network namespace ip netns add test1 ip netns add test2 #删除network namespace ip netns delete test1 #查看创建network namespace ip netns list
(2)查看test1、test2的network namespace信息
ip netns exec test1 ip a ip netns exec test2 ip a
(3) 使lo端口up起来
ip netns exec test1 ip link set dev lo
(4) 添加一对veth接口
ip link add veth-test1 type veth peer name veth-test2
(5) 将veth-test1添加到test1中,veth-test2添加到test2
ip link set veth-test1 netns test1 ip link set veth-test2 netns test2 #查看是否添加成功 ip netns exec test1 ip link ip netns exec test2 ip link
(6)给veth-test1、veth-test2分配端口
ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1 ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2
(7)将veth-test1、veth-test2端口up,并查看ip
#up端口 ip netns exec test1 ip link set dev veth-test1 ip netns exec test2 ip link set dev veth-test2 #查看ip ip netns exec test1 ip a ip netns exec test2 ip a
(8)查看互相是否可以通信
ip netns exec test1 ping 192.168.1.2 ip netns exec test2 ping 192.168.1.1
#下载 wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz #解压缩 tar zxvf etcd-v3.0.12-linux-amd64.tar.gz #进入etcd-v3.0.12-linux-amd64目录下 cd etcd-v3.0.12-linux-amd64