Docker网络
Posted small-office
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker网络相关的知识,希望对你有一定的参考价值。
none:什么都没有的网络,挂在这个网络下的容器除了lo,没有其他任何网卡,容器创建时,可以通过--network=none指定使用none网络。
host:容器的网络配置与host完全一样。可以通过--network=host指定使用host网络。host的网络性能很好,但容易产生端口冲突。
bridge: bridge网络是用的最广的网络,也是默认的网络,Docker有一个名为docker0的 linux bridge,如果不指定--network,创建的容器默认都会挂到docker0上。每创建一个容器,就会创建一个veth pair,一端连接在docker0,另一端连接在容器网卡,bridge的端口是私有的,不会占用host端口,如果需要访问则需要通过-p或-P做端口映射。
自定义网络:指定驱动,名称,cidr等可以创建自定义网络,创建完成后,ifconfig会多一个网卡,新创建的网络和docker0类似,可以像使用docker0一样使用它。创建容器时需要指定网络--network,指定好后创建的容器就会挂在这个网络下,
网络隔离
docker依赖iptables来隔离不同的容器网络,通过iptables-save查看
两个网络的通信被drop掉了,如果希望建在这两个网络上的容器可以通信,则需要在一个容器内添加一个网卡:
外部网络
我们知道,在bridge网络下,容器通过docker0或自定义网络来完成交互,访问外网统一需要如此,看下iptables配置:
这个配置的含义是来着docker0或rhj_test网段的数据报会被docker0或rhj_test转发到MASQUERADE,MASQUERADE可以完成地址伪装,MASQUERADE从服务器的网卡上,自动获取当前ip地址,将包的源地址替换成host的地址发送出去,完成NAT。
外部网络访问容器数据包方向相反,每一个映射的端口,host都会启动一个docker-proxy进程来处理访问容器的流量,docker-proxy会将我们在端口映射时做的配置做映射,当外部以这个ip和端口访问时,会被转发到docker0网络,再发给容器本身。
以上是关于Docker网络的主要内容,如果未能解决你的问题,请参考以下文章