veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出。用于解决网络命名空间之间的隔离。(宿主机和容器)
docker0:网桥是一个二层网络设备,通过网桥可以将linx支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信。用于解决容器和容器之间的通信。
注意:无法直接访问容器IP,只能访问宿主机IP。
Docker使用iptables实现网络通信
一.外部访问容器
以nginx为例:
启动一个nginx容器
当浏览器输入192.168.32.130:80(数据包),在宿主机这里数据包的目的地址(192.168.32.130:80)会被iptables利用DNAT(目标网络地址转换)转换成172.17.0.3:80,并查询路由表得到对应的网卡,网卡发送ARP广播,最后找到对应的容器.
ss -antp |grep 80
iptables -t nat -vnL DOCKER
ip route
二.容器访问外部
根据路由表得到网卡,根据网卡到达宿主机,在宿主机这里会被iptables利用SNAT(源地址转换)转换成宿主机ip,然后转发到默认网关(宿主机网关),借助宿主机的网络访问互联网。
iptables -t nat -vnL POSTROUTING
版权声明:本文为Wqr_18390921824原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。