使用veth-pair直接连接容器
1.新建两个无网络容器:
docker run -itd --net=none --privileged=true --name=test1 ubu /bin/bash
docker run -itd --net=none --privileged=true --name=test2 ubu /bin/bash
其中ubu为装了网络命令的Ubuntu系统
网络设置为无网络
必须特殊root权限否则修改不了网络设置
2.新建veth-pair
ip link add tap1 type veth peer name tap2
3.查看容器进程号或者说 Network NameSpac
docker inspect -f {{.State.Pid}} test1
docker inspect -f {{.State.Pid}} test2
得到的结果分别假设为$test1和$test2
3.两头塞到不同容器中,并激活
ip link set tap1 netns $test1
ip link set tap2 netns $test2
##ip netns exec $test1 ip link set dev tap1 up
##ip netns exec $test2 ip link set dev tap2 up
docker exec test1 ip link set dev tap1 up
docker exec test2 ip link set dev tap2 up
4.给容器接口(interface)分配ip
##ip netns exec $test1 ip addr add 10.0.0.1/24 dev tap1
##ip netns exec $test2 ip addr add 10.0.0.2/24 dev tap2
docker exec test1 ip addr add 10.0.0.1/24 dev tap1
docker exec test2 ip addr add 10.0.0.2/24 dev tap2
5.之后两容器就连接成功,可以通过接口ip进行通信
可以使用ping命令来验证
##ip netns exec $test1 ping 10.0.0.2
##ip netns exec $test2 ping 10.0.0.1
docker exec test1 ping 10.0.0.2
docker exec test2 ping 10.0.0.2
可以发现接口在塞入容器的前后,主机下的接口数量是有变化的
将容器的命名空间放在ip命令下即可使用##命令,(首先确保目录的存在)
docker inspect -f {{.State.Pid}} test1
ln -s /proc/$pid1/ns/net /var/run/netns/test1