网络关系
主机的网卡情况 ip a![6IM2{9%A`)AGAJMN]IDDES7.png](/uploads/projects/xx2738@pra3d2/262d73907d34de803233ceb352fdc037.png)
容器里面的网卡信息,容器中分配的ip 用的就是 主机中 docker0网卡的桥接 就是在该网段
每个启动容器后,主机的网卡中多一个跟容器互绑的网卡,【16-17 、17-16】配对出现,容器删除也随着没了
结论说明:
- 容器内和主机的网是能够相互ping通的
- 两个不同的容器间也是能够相互ping通的

查看网络信息, bridge 是默认桥接方式网络名称
[root@localhost home]# docker network inspect bridge
"Containers": {"85328438f00f7d5fb7a76bacd0c588fd9625a5e7c326a492eb24cb1faafe95bf": {"Name": "cc001","EndpointID": "19b4cfbf38f7be11eb552942f67d642857ba90d2cd640a7033c6205e4b573b48","MacAddress": "02:42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""},"8b2bce6ab7983acba289495a3d9f363228ceb92c2bb5aea6ee04da1b7f31c296": {"Name": "cc002","EndpointID": "c0a61342a0e69d3794fccaa84e9c1293f65630a4c9f611996f1c53df194ca312","MacAddress": "02:42:ac:11:00:04","IPv4Address": "172.17.0.3/16","IPv6Address": ""}}
容器互连时 容器重启ip变化,使用—link
容器重启后 ip变了,导致连接不到,我们可以使用link,用容器名称[容器id] 去当做网络标识,这样就不用关心ip的变化,只有容器的名称变,类似与fengin
现在启动两个容器
docker run -it --name cc001 centos # 172.17.0.2docker run -it --name cc002 centos # 172.17.0.3# ping 对方的地址 没有问题
ping 容器名称,默认是不行的
[root@82f07025bf2d /]# ping cc002ping: cc002: Name or service not known
掉到cc001容器,重新run 加link, ping 容器名称 ok
[root@localhost home]# docker run -it --name cc001 --link cc002 centos[root@85328438f00f /]# ping cc002PING cc002 (172.17.0.3) 56(84) bytes of data.64 bytes from cc002 (172.17.0.3): icmp_seq=1 ttl=64 time=0.166 ms64 bytes from cc002 (172.17.0.3): icmp_seq=2 ttl=64 time=0.077 ms
模拟cc002地址变更后 是否还能ping通
docker run -it --name cc003 centos #启动以cc003 占用掉 172.17.0.3docker start cc002 #重新启动cc002 地址 172.17.0.4#cc001中 继续ping cc002, 发现0.3 变成了 0.4 没毛病[root@85328438f00f /]# ping cc002PING cc002 (172.17.0.4) 56(84) bytes of data.64 bytes from cc002 (172.17.0.4): icmp_seq=1 ttl=64 time=0.149 ms64 bytes from cc002 (172.17.0.4): icmp_seq=2 ttl=64 time=0.071 ms
link原理
他是在hosts文件 做了映射 cc002[8b2bce6ab798] 对应 它的地址,cc002的地址变了 hosts里的映射地址也随着变
[root@85328438f00f /]# cat /etc/hosts127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.17.0.4 cc002 8b2bce6ab798172.17.0.2 85328438f00f
自定义网络
自定义网络,解决了不用 —link 也可以通过 容器名后id ping通
我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络!
查看网络
[root@localhost home]# docker network lsNETWORK ID NAME DRIVER SCOPE85028594255e bridge bridge local7130848c292d host host locala8a172634e96 none null local网络id 名称 连接方式 域
运行启动容器时, 默认网络 —net bridge
docker -d --name cc001 centos #docker -d --name cc001 --net bridge centos # 默认网络bridge
创建一个网络
[root@localhost home]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet569fec80190f4636fefec3c14fa1ced0c21f0282c08c6470044dc805865f1702
启动两个容器, 指定网络mynet
[root@localhost home]# docker run -it --name cc005 --net mynet centos # 192.168.0.22b3a9561a3327f7f1e0e700cf48fedee2bef87657b2a9243287cb2e7a9af8737[root@localhost home]# docker run -it --name cc006 --net mynet centos # 192.168.0.3dbfee4b090eb7bc234ee21e990d6b3878471e6123d3d7a75ce477c7f2583cdd0
直接在cc005 里ping cc006, ok
[root@0116e2d76d04 /]# ping cc006PING cc006 (192.168.0.3) 56(84) bytes of data.64 bytes from cc006.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.161 ms64 bytes from cc006.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.074 ms
网络连通
不同网络容器之间的 通信
用 docker network connect 网络 容器,将 容器加入到 该网络
docker network connect mybnet cc001
S
