默认,Docker会将所有容器连接到docker0提供的虚拟子网。有时需要两个容器直连通信,而不需要通过主机网桥桥接。

此时,可以创建一对peer接口,分别放在两个容器,配置点到点的链路类型。首先启动2个容器

$ sudo docker run -it --rm --net=none base /bin/bash
root@1f1f4c1f931a:/#
$ sudo docker run -it --rm --net=none base /bin/bash
root@12e343489d2f:/#

找到进程号,创建网络namespace的跟踪文件

$ sudo docker inspect -f '{{ .State.Pid }}' 1f1f4c1f931a
2989
$ sudo docker inspect -f '{{ .State.Pid }}' 12e343489d2f
3004
$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004

创建一对peer接口,然后配置路由

sudo ip link add A type veth peer name B

sudo ip link set A netns 2989
sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
sudo ip netns exec 2989 ip link set A up
sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A

sudo ip link set B netns 3004
sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
sudo ip netns exec 3004 ip link set B up
sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B

现在两个容器即可相互ping通,并成功建立连接。点到点的链路不需要子网和子网掩码。

results matching ""

    No results matching ""