拿tomcat举例:
# 先运行一个tomcat docker run -d -P --name tomcat01 tomcat # 查看容器的内部网络地址 ip addr docker exec -it tomcat01 ip addr # 发现报错看不了ip,因为docker下载tomcat是极简版的,所以要先进去tomcat下载iproute2 docker exec -it tomcat01 /bin/bash # 更新apt apt update # 安装iproute2 才能用ip a apt install -y iproute2 # 这才再用查看容器内部网络的命令 docker exec -it tomcat01 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 6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever # 能不能ping通容器内的ip [root@gaoleiTest /]# ping 172.17.0.2 PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data. 64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.049 ms 64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.061 ms 64 bytes from 172.17.0.2: icmp_seq=3 ttl=64 time=0.060 ms # linux可以ping通docker容器内部
原理:
1.我们每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡 docker0 桥接模式,使用的技术是veth-pair技术!
再次ip addr
2.再启动一个容器测试(又多了一对网卡)
# 我们发现这个容器带来的网卡,都是一对对的 # veth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一段连接协议,一段彼此相连 # 正因为它的特性,我们可以用veth-pair充当一个桥梁,连接各种虚拟网络设备的 # OpenStac、Docker容器之间的连接,OVS的连接都是用的veth-pair技术
3.测试tomcat01和tomcat02是否可以ping通
结论:
容器和容器之间是可以ping通的
网络模型图:
结论:
·docker使用的是linux的桥接,宿主机中是一个Docker容器的网桥,dcoker0。
·所有容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP
·Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高。(内网传递文件)
·只要容器删除,对应网桥就没了。
补充ip地址知识:
255.255.0.1/16 域
16=2*8 就是 255*255=65025 (去掉回环地址0.0.0.0和最终地址255.255.255.255)
可用地址:65023个
00000000.00000000.00000000.00000000