docker中网络实现原理
当 Docker 启动时,会主动在主机上创立一个 docker0 虚构网桥,实际上是 Linux 的一个 bridge,能够了解为一个软件交换机。它会在挂载到它的网口之间进行转发。
同时,Docker 随机调配一个本地未占用的公有网段(在 RFC1918 中定义)中的一个地址给 docker0 接口。比方典型的 172.17.42.1,掩码为 255.255.0.0。尔后启动的容器内的网口也会主动调配一个同一网段(172.17.0.0/16)的地址。
创立一个 Docker 容器的时候,同时会创立了一对 veth pair 接口(当数据包发送到一个接口时,另外一个接口也能够收到雷同的数据包)。这对接口一端在容器内,即 eth0;另一端在本地并被挂载到 docker0 网桥,名称以 veth 结尾(例如 vethAQI2QT)。通过这种形式,主机能够跟容器通信,容器之间也能够互相通信。Docker 就创立了在主机和所有容器之间一个虚构共享网络。
docker网络配置参数
-b BRIDGE或--bridge=BRIDGE指定容器挂载的网桥--bip=CIDR定制 docker0 的掩码-H SOCKET...或--host=SOCKET...Docker 服务端接管命令的通道--icc=true|false是否反对容器之间进行通信--ip-forward=true|false请看下文容器之间的通信--iptables=true|false是否容许 Docker 增加 iptables 规定--mtu=BYTES容器网络中的 MTU
上面2个命令选项既能够在启动服务时指定,也能够在启动容器时指定。在 Docker 服务启动的时候指定则会成为默认值,前面执行 docker run 时能够笼罩设置的默认值。
--dns=IP_ADDRESS...应用指定的DNS服务器--dns-search=DOMAIN...指定DNS搜寻域
这些选项只有在 docker run 执行时应用,因为它是针对容器的个性内容。
-h HOSTNAME或--hostname=HOSTNAME配置容器主机名--link=CONTAINER_NAME:ALIAS增加到另一个容器的连贯--net=bridge|none|container:NAME_or_ID|host配置容器的桥接模式-p SPEC或--publish=SPEC映射容器端口到宿主主机-P or --publish-all=true|false映射容器所有端口到宿主主机
容器拜访内部网络
容器要想拜访内部网络,须要本地零碎的转发反对。在Linux 零碎中,查看转发是否关上
如果为0需关上sysctl -w net.ipv4.ip_forward=1
发表回复