1、创建两个ubuntu容器,分别为ubuntu1和ubuntu2(以下tzk/ubuntu是自己封装的镜像,里面添加了一些基本的工具,如 net-tools)
sudo docker run -itd --name=ubuntu1 --network=none tzk/ubuntu
sudo docker run -itd --name=ubuntu2 --network=none tzk/ubuntu
2、执行下面的命令来分别获取容器进程号
PID1=$(sudo docker inspect -f '{{.State.Pid}}' ubuntu1) #容器ubuntu1的PID1
PID2=$(sudo docker inspect -f '{{.State.Pid}}' ubuntu2) #容器ubuntu2的PID2
3、查看进程号(可以使用sudo docker inspect ubuntu1|grep Pid进行验证比对)
echo "$PID1"
echo "$PID2"
4、执行如下命令,将进程网络命名空间恢复到主机目录(如果/var/run/netns目录不存在,以root用户手动创建目录即可)
sudo ln -s /proc/$PID1/ns/net /var/run/netns/$PID1
sudo ln -s /proc/$PID2/ns/net /var/run/netns/$PID2
5、使用ip netns list 命令查看容器的namespace,名称即 PID1、PID2
ip netns list
6、以下操作就是两个命名空间之间的通信,具体细节操作请移步
1)、 sudo ip link add v1 type veth peer name v2
2)、 sudo ip link set v1 netns $PID1
sudo ip link set v2 netns $PID2
3) 、 sudo ip netns exec $PID1 ip link set v1 up
sudo ip netns exec $PID1 ip addr add 10.0.0.1/24 dev v1
sudo ip netns exec $PID2 ip link set v2 up
sudo ip netns exec $PID2 ip addr add 10.0.0.2/24 dev v2
7、测试,现在,我们可以从一个容器ping通另一个容器(进入容器内部测试)。
复制以下内容直接执行(记得修改你电脑上的ubuntu镜像):
sudo docker run -itd --name=ubuntu1 --network=none tzk/ubuntu:latest
sudo docker run -itd --name=ubuntu2 --network=none tzk/ubuntu:latest
PID1=$(sudo docker inspect -f '{{.State.Pid}}' ubuntu1)
PID2=$(sudo docker inspect -f '{{.State.Pid}}' ubuntu2)
sudo ln -s /proc/$PID1/ns/net /var/run/netns/$PID1
sudo ln -s /proc/$PID2/ns/net /var/run/netns/$PID2
sudo ip link add v1 type veth peer name v2
sudo ip link set v1 netns $PID1
sudo ip link set v2 netns $PID2
sudo ip netns exec $PID1 ip link set v1 up
sudo ip netns exec $PID1 ip addr add 10.0.0.1/24 dev v1
sudo ip netns exec $PID2 ip link set v2 up
sudo ip netns exec $PID2 ip addr add 10.0.0.2/24 dev v2
注:1、当出现类似“ln: 无法创建符号链接'/var/run/netns/25268': 没有那个文件或目录”时,可手动添加文件夹,netns,或 者在代码中实现 sudo mkdir /var/run/netns
2、本例中使用的是“tzk/ubuntu”,自己封装的镜像,如果使用docker hub上下载的,例如镜像“ubuntu:latest”,在完 成后期测试工作的时候,由于--network=none 会出现apt-get update 、apt install net-tools 报错现象。故建议先自己 封装一个安装完net-tools工具后的镜像,继而执行以上文章所述的操作。