docker run -it --name=arch2 archlinux /bin/bash docker run -it --name=ubuntu2 ubuntu /bin/bash
在另一个终端(宿主机)上看看:
1 2 3 4
root@**********:~# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 30f913d8e3ff ubuntu "/bin/bash" 14 hours ago Up 35 minutes ubuntu2 ec0ca9aedc9f archlinux "/bin/bash" 14 hours ago Up 36 minutes arch2
可以看到确实有两个容器正在运行。
3、查看容器网络
1 2 3 4 5
root@********:~# docker network ls NETWORK ID NAME DRIVER SCOPE da149ecc5bf3 bridge bridge local 5c60928659e8 host host local 1c8eeab72508 none null local
root@*******:/# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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 17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:03 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.18.0.3/16 brd 172.18.255.255 scope global eth0 valid_lft forever preferred_lft forever
解释一下就是:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 这是回环接口(loopback interface),用于本地主机内部通信。 <LOOPBACK,UP,LOWER_UP> 表示接口是一个回环接口,并且处于启用状态。 mtu 65536 表示最大传输单元的大小。 qdisc noqueue 表示没有队列机制,即无需排队即可传输数据。 eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
这是第一个以太网接口(Ethernet interface),标记为 eth0。 <BROADCAST,MULTICAST,UP,LOWER_UP> 表示接口支持广播和多播,并且处于启用状态。 mtu 1500 表示最大传输单元的大小为1500字节。 qdisc noqueue 表示没有队列机制,即无需排队即可传输数据。 state UP 表示接口处于启用状态。 link/ether 02:42:ac:12:00:03 表示接口的物理地址(MAC 地址)为 02:42:ac:12:00:03。 inet 172.18.0.3/16 表示接口的 IPv4 地址为 172.18.0.3,子网掩码为 /16。 brd 172.18.255.255 表示广播地址。 scope global 表示接口的地址在全局范围内可达。
arch2 网络信息:
1 2 3 4 5 6 7 8 9
[root@******* /]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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 13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:12:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.18.0.2/16 brd 172.18.255.255 scope global eth0 valid_lft forever preferred_lft forever
6、完整的网络拓扑图景
通过以上的分析,就能轻而易举地得到这个图:
三、结论
1、ubuntu2、arch2是共用的一个路由器(网桥):docker0;
2、所有的容器启动时,如果不指定网络的情况下,都是docker0路由的;
3、docker0 通过 NAT 穿透连到 host 主机的物理网卡上(补充)。
四、测试
通过 arch2 去 ping ubuntu1:
1 2 3 4 5 6
root@******** /]# ping 172.18.0.3 PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data. 64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.095 ms 64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.123 ms 64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.160 ms ......
这是没问题的,因为它们位于同一个内网,当然 ping 的通。
1 2 3 4 5 6
[root@******** /]# ping baidu.com PING baidu.com (110.242.68.66) 56(84) bytes of data. 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=48 time=28.2 ms 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=48 time=28.2 ms 64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=48 time=28.2 ms ......