同一主机下两个容器间进行通信(一)2021.07

使用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容