docker网络
Posted liujunjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker网络相关的知识,希望对你有一定的参考价值。
Docker 网络概况
用一张图来说明 Docker 网络的基本概况:
四种单节点网络模式
bridge 模式
Docker 容器默认使用 bridge 模式的网络。其特点如下: 使用一个 linux bridge,默认为 docker0 使用 veth 对,一头在容器的网络 namespace 中,一头在 docker0 上 该模式下Docker Container不具有一个公有IP,因为宿主机的IP地址与veth pair的 IP地址不在同一个网段内 Docker采用 NAT 方式,将容器内部的服务监听的端口与宿主机的某一个端口port 进行“绑定”,使得宿主机以外的世界可以主动将网络报文发送至容器内部 外界访问容器内的服务时,需要访问宿主机的 IP 以及宿主机的端口 port NAT 模式由于是在三层网络上的实现手段,故肯定会影响网络的传输效率。 容器拥有独立、隔离的网络栈;让容器和宿主机以外的世界通过NAT建立通信 关于容器通过 NAT 连接外网的原理,请参考我的另一篇文章 Netruon 理解(11):使用 NAT 将 Linux network namespace 连接外网。 iptables 的 SNTA 规则,使得从容器离开去外界的网络包的源 IP 地址被转换为 Docker 主机的IP地址:
每个docker都有自己的一个名字命名空间,叫vethX,X是任意数字。每一个容器都会连接在自己的名字命名空间上,名字命名空间又是在我们网桥上创建的,也就意味着这个名字命名空间之间是可以互相通信的,docker网络又依会于名字命令空间,所以docker之间是可以互相通信的。容器访问外网,网桥和真实网卡做一个nat转换。外部访问容器,一个是通过在宿主机上exec进行交互化处理,另一个是通过dnat访问。
Host 模式
定义:
Host 模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的 Docker 容器会和 host 宿主机共享同一个网络 namespace,故 Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的 IP 地址即为宿主机 eth0 的 IP 地址。其特点包括:
-
- 这种模式下的容器没有隔离的 network namespace
- 容器的 IP 地址同 Docker host 的 IP 地址
- 需要注意容器中服务的端口号不能与 Docker host 上已经使用的端口号相冲突
- host 模式能够和其它模式共存
实验:
(1)启动一个 host 网络模式的容器
以上是关于docker网络的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
VSCode自定义代码片段14——Vue的axios网络请求封装