容器的四种网类bridge:netbridge桥接式网路:这里的桥接网络不是物理桥接,指的是nat桥接,bridge模式是docker的默认网络模式地址是172。17。0网段,不写net参数,就是bridge模式。 Host:nethost主机式网络:容器与宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 container:netcontainer:NAMEorID联盟式网络:这个模式指定新创建的容器和已经存在的一个容器共享一个NetworkNamespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 none:netnone封闭式网络:Docker容器拥有自己的NetworkNamespace,这个Docker容器没有网卡(只有lo回环网络)、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。 容器默认的桥接网络是172。17。0。1,每启动一个容器将默认分配一个172。17。0网段的地址。 安装bridgeutils工具查看网络交接情况 〔rootlocalhost〕yuminstallbridgeutils 〔rootlocalhost〕brctlshow显示桥接了三块网卡(已启动三个容器) 〔rootlocalhost〕dockerinspectbridge(可查看默认bridge网络) 〔rootlocalhost〕dockercontainerinspecttt查看容器网络 〔rootlocalhost〕dockerrunnamebyitnetworkbridgebusybox:latest指定bridge网络模式。 〔rootlocalhost〕dockerrunnamebyitnetworknonebusybox:latest指定none网络模式,这个Docker容器没有网卡称为封闭式容器。 〔rootlocalhost〕dockerrunnamebyitnetworkbridgehjchjdns8。8。8。8busybox:latest 启动容器时指定其容器名称、网络类型、主机名、DNS地址。 〔rootlocalhost〕dockerrunnamebyitnetworkbridgehjchjdns8。8。8。8addhostwww。jchj。shop:10。0。0。101busybox:latest指定IP解析域名。 〔rootlocalhost〕dockerrunnamejjitdp32761:80jchjhttpd:v0。2把jj容器中需要对外暴露的80端口映射至宿主机的32761端口上,因此可以直接通过访问宿主机curl10。0。0。101:32761来访问容器内的http服务。 主机是网络:容器与宿主机共用一个NetworkNamespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。 〔rootlocalhost〕dockerrunnameb2networkhostitbusybox (宿主机的网络地址也是10。0。0。80) 桥接式网路:这里的桥接网络不是物理桥接,指的是nat桥接,bridge模式是docker的默认网络模式地址是172。17。0网段 〔rootlocalhost〕dockerrunnameb2networkbridgeitbusybox (这里network指不指明bridge都一样,容器默认即是net桥接网络) 封闭式网络:Docker容器拥有自己的NetworkNamespace,这个Docker容器没有网卡(只有lo回环网络) 〔rootlocalhost〕dockerrunnameb2networknoneitbusybox (IP、路由等信息。后面我们可以自己为Docker容器添加网卡、配置IP等) 联盟式容器:这个模式指定新创建的容器和已经存在的一个容器共享一个NetworkNamespace,而不是和宿主机共享。相当于一个主机上跑多个进程如:一个主机跑有nginx、mysql或是php等程序。 运行一个交互式容器: 〔rootlocalhost〕dockerrunnameb1itbusybox 〔rootlocalhost〕dockerrunnameb2networkcontainer:b1itbusybox 自定义docker0桥的网络属性信息(也就是改变默认docker0的桥接的172。17。0。网络地址段) 更改docker0桥的网络属性信息:etcdockerdaemon。json bip:192。168。100。124,bip即bridgeip之意,用于指定docker0桥自身的IP地址,其它选项可通过此地址计算得出 fixedcidr:10。20。0。016,指定默认IPV4地址 fixedcidrv6:2001:d8::64,指定默认IPV6地址 mtu:1500, defaultgateway:10。20。1。1,指定默认IPV4地址网关 defaultgatewayv6:2001:db8:abcd::89,指定默认IPV6地址网关 dns:{114。114。114。114,10。20。1。3},指定DNS地址 此处我们一般只指定bip地址即可。 〔rootlocalhost〕vimetcdockerdaemon。json (在容器极速器地址后面加上bip:192。168。100。124保存退出重启容器) 〔rootlocalhost〕systemctlrestartdocker重启容器 〔rootlocalhost〕dockerrunnameb2networkbridgeitbusybox docker守护进程的cs,其默认仅监听UnixS0cket格式的地址,varrundocker。sock;如果使用TCP套接字,etcdockerdaemon。json hosts:〔tcp:0。0。0。0:2375,unix:varrundocker。sock〕 (即可通过地址访问,tcp:0。0。0。0:2375默认监听本机所有地址的2375端口,unix:varrundocker。sockunix协议路径) 也可向docker直接传递Hhost选项 〔rootlocalhost〕vimetcdockerdaemon。json 〔rootlocalhost〕systemctlrestartdocker重启容器 〔rootlocalhost〕sstnl 〔rootjs〕dockerH10。0。0。80:2375images连接远程主机的docker 〔rootjs〕dockerinfo在docker的信息中可以看到还可以创建ipvlan、manvlan、overlay的桥。 再创建一个bridge的桥使用不同的IP地址段,如:dockernetworkcreatedbridgesubnet172。26。0。016gateway172。26。0。1mybr0 〔rootlocalhost〕dockernetworkcreatedbridgesubnet172。26。0。016gateway172。26。0。1mybr0 两个不同网络地址段的bridge桥都是net桥接到本机的物理接口的,应该是可以相互通信的,如果不行就开启系统的核心转发功能。 CentOS7开启内核转发 vimetcsysctl。conf 添加以下参数 net。ipv4。ipforward11表示开启0表示关闭 net。ipv4。conf。default。rpfilter0 net。ipv4。conf。all。rpfilter0控制系统是否开启对数据包源地址的校验 rpfilter参数有三个值,0、1、2,具体含义:0:不开启源地址校验。1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。 sysctlp让内核参数立即生效,加载sysctl配置文件