Docker 容器之间之所以能通讯,也是利用了网络命名空间的原理,我们可以创建两个容器,然后使用命令docker exec 6b51903a07f5 ip a查看容器的IP地址。

一、测试容器之间的通讯

1.创建容器 test1/test2

docker run -d --name=test1  busybox /bin/sh -c "while true;do sleep 3600;done"
docker run -d --name=test2  busybox /bin/sh -c "while true;do sleep 3600;done"

2.docker ps列出运行的容器

输出结果

[vagrant@soderberg-dev ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS
     NAMES
6b51903a07f5        busybox             "/bin/sh -c 'while t…"   6 seconds ago       Up 5 seconds
     test2
a463215111f5        busybox             "/bin/sh -c 'while t…"   5 minutes ago       Up 5 minutes
     test1

3.测试网络是否联通

docker exec -it a463215111f5 /bin/sh
/ # ip a

输出结果

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever

4.执行ping 172.17.0.3查看结果

二、网络命名空间之通讯

1.查看以及存在的网络命名空间

 ip netns list

2.建立两个网络命名空间

sudo ip netns add test1
sudo ip netns add test2

3.进入网络命名空间test1查看IP地址

sudo ip netns exec test1 ip a

4.查看IP连接

ip link

5.启动test1的l0网络状态

sudo ip netns exec test1 ip link set dev lo up

6.添加veth对到当前主机,且名为veth-test1veth-test2

sudo ip link add veth-test1 type veth  peer name veth-test2

7.将veth-test1设备添加到网络命名空间test1,veth-test2添加到网络命名空间test2

sudo ip link set veth-test1 netns test1
sudo ip link set veth-test2 netns test2

8.设置IP地址

sudo  ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1
sudo  ip netns exec test2 ip addr add 192.168.1.2/24 dev veth-test2

9.启动设备veth-test1veth-test2

sudo ip netns exec test1 ip link set dev veth-test1 up
sudo ip netns exec test2 ip link set dev veth-test2 up

10.测试设备之间是否联通

sudo ip netns exec test1 ping 192.168.1.2
sudo ip netns exec test2 ping 192.168.1.1