1. 首页 > 笙耀百科 >

docker获取宿主机ip地址 docker容器获取宿主ip

云计算Docker网络使用

通过添加iptable规则实现

参数来指定端口映射。

docker获取宿主机ip地址 docker容器获取宿主ipdocker获取宿主机ip地址 docker容器获取宿主ip


docker获取宿主机ip地址 docker容器获取宿主ip


使用命令运行nginx,-P指令随机映射一个端口映射容器内部端口

我们使用 docker ps 或者 docker container ls 可以看到,宿主机的454端口被映射到了容器的80端口,此时通过访问宿主机的454就可以访问nginx默认页面

语法格式:

首先我们先将我们之前运行的容器全从a容器ping b容器部删除

我们可以使用docker link链接容器,避免容器重启ip地址变化的问题

格式如下:

我们进入mycentos2容器

查看容器的hosts,发现了别名webcentos的ip地址

ping mycentos1 容器的ip别名 webcentos ,发现容器可以ping通

docker创建以后默认使用的是Linux的 桥连接 ,在宿主机上虚拟创建了一个容器 网桥 (docker0),使用 ip addr 查看

Docker每启动一个容器就会根据 docker0 的网段分配给容器一个IP地址,这个网桥docker0是所有容器的默认。因为宿主机内容器都使用网桥docker0,所以容器可以使用IP进行通信。

Docker就是很好的利用了Linux虚拟网络技术,在宿主机和容器内分别创建一个虚拟接口,实现他们彼此联通.

网络模式配置说明 bridge模式--net=bridge 默认使用 ,在docke的默认网桥docker0上为容器创建网络 none模式--net=none不配置网络,用于稍后进入容器,自行配置网络 container模式--net=container:name/id容器可以和应一个容器共享network namespace,k8s的pod使用此模式 hots模式--net=host容器和宿主机共享Network namespace 用户自定义--net=createnet用户使用network相关指令创建网络

Docker的container模式是指,创建容器的时候,使用--net=container:name/id,指定创建的容器和已经有的容器共享一个Network Namespace。

docker网络的host模式容器和宿主机共享Network namespace

我们首先使用 docker network 创建一个新的docker网络

-d指定docker的网络模型,有 bridge、overlay ,然后overlay网络模型使用的是Swarm mode。

使用ping来证明mycentos6容器和mycentos5可以相互链接

同理在mycentos5可以和mycentos5相互链接

Docker网络

Docker网络

在宿主机上通过brctl show docker0可以看到docker0桥接的网卡与启动的容器的v一致。

容器之间的通讯:

1、数据包从a容器对应的v流到docker0

2、docker0广播arp寻找b容器对应的地址

4、a容器与b容器建立连接并实现通信

容器与外网通讯

1、v数据流到docker0网桥

2、docker0网桥流量流向0

3、0流量流向对应的目标

只要是0可以访问到的,容器就可以访问到

直接使用宿主机的网络,无法指定出入的流量以及暴露的端口,默认暴露出去的地址是0.0.0.0:xxxx,可以直接访问(TODO())。

通过docker指令创建自定义的网桥,由于默认的bridge模式无法为container指定ip,所以需要通过自定义网桥的方式来实现,且自定义网桥可以限制容器之间的相互访问,跨网桥无法互相访问。

使用指定网桥的时候只要通过network指定网桥名称即可,且使用自定义的网桥可以指定容器的IP。并且由于是固定IP,就可以通过iptable来做各种的规则。

这个模式就是指定一个已有的容器,共享该容器的IP和默认选择bridge模式,容器启动后通过网桥docker0获取ip地址端口。除了网络方面两个容器共享,其他的如文件系统,进程等还是隔离开的。

这个模式下,dokcer不为容器进行任何网络配置。需要我们自己为容器添加网卡,配置IP。

该指令添加了一条nat规则,把所有来自 172.17.0.0/16 网段且即将流出本主机的数据包的源 IP 地址都修改为 10.0.0.100(建议通过添加自定义网桥的方式来做)。

直接通过-p的方式暴露一个端口出去,默认使用的是0.0.0.0,所有网卡均可访问,也可以在参数中指定特定的网卡,例如:-p 192.168.1.1:80:80来指定只能通过该网卡来访问。

查看nat表

查看路OPTIONS注解:由规则

route -n

Nacos微服务注册地址为Docker内网IP的解决办法

docker跟宿主机交互的是通过原生网络实现的。

Nacos(注册中心)是通过 【 IP+PORT】 的形式调用其他服务。

在容器中运行的网络应用,需要让外部可以访问这些应用,我们可以通过

问题:

启动 Docker 的时候,用 --network 参数,可以指定网络类型

docker从容器中怎么访问宿主机

当然,配置了上述网络类型后,nacos 是可以拿到宿主机的 IP,但是此时拿到的是宿主机的内网 IP,解决办法如下:

docker搭建了lnmp环境后,如果需要访问安装在宿主机上的数据库或中间件,是不能直接使用127.0.0.1这个ip的,这个ip在容器中指向容器自己,那么应该怎么去访问宿主机呢:

例如你的docker环境的虚拟IP是192.168.99.100,那么宿主机同样会托管一个和192.168.99.100同网段的虚拟IP,并且会是主IP:192.168.99.1,那么就简单了,在容器中访问192.168.99.1这个地址就等于访问宿主机,问题解决

注意,通过192.168.99.1访问宿主机,等于换了一个ip,如果数据库或中间件限制了本机访问或者做了ip段限制,要记得添加192.168.99.1到客户机从不止一台DHCP接收到提供之后,会选择个收到的DHCPOFFER包,并向网络中广播一个DHCPREQUEST消息包,表明自己已经接受了一个DHCP提供的IP地址。该广播包中包含所接受的IP地址和的IP地址。白名单

当Docker进程启动之后,它会配置一个虚拟的网桥叫docker0在宿主机上。这个接口允许Docker去分配虚拟的子网给即将启动的容器们。这个网桥在容器内的网络和宿主机网络之间将作为接口的主。

Docker容器启动后,将创建一个新的虚拟接口并分配一个网桥子网内的IP地址。这个IP地址嵌在容器内网络中,用于提供容器网络到宿主机docker0网桥上的一个通道。Docker自动配置iptables规则来放行并配置NAT,连通宿主机上的docker0,就可以访问宿主机的mysql数据文件了。

docker安装后宿主机网卡ip无法配置

Docker是通过iptable的方式实现流量的控制的

您要问的是docker安装后宿主机网卡ip无法配置的原因吗?网络冲突、网络驱动问题。

使用docker0网桥,docker0的默认网段是172.17.0.0,地址为172.17.0.1,通过bridge模式启动的容器,进入容器日内部并使用ip route show指令可以看到其使用的就是docker0的地址。

1、网络冲突:Docker会使用默认的网络配置与宿主机的网络配置发生冲突,导致宿主机无法分配IP地址。

2、网络驱动问题:Docker使用不同的网络驱动程序,包括bridge、overlay,网络驱动程序与宿主机的网络配置不兼容或存在冲突,会导致宿主机无法配置IP地址。

Docker网络与Iptables浅析

iptables -L -n -t nat --line-numbers

了解 Docker 网络模式,Docker 如何作 iptables 以实现网络端口映射,使用 iptables 控制主机网络流量规则。

3、b容器的v收到广播并回复docker0自己就是目标

当 Docker 进程启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。从 docker0 子网中分配一个 IP 给容器使用,并设置 docker0 的 IP 地址为容器的 默认 。在主机上创建一对虚拟网卡 v pair 设备,Docker 将 v pair 设备的一端放在新创建的容器中,并命名为 0 (容器的网卡),另一端放在主机中,以 vxxx 这样类似的名字命名,并将这个网络设备加入到 docker0 网桥中。 bridge 模式是 docker 的默认网络模式,不写 –net 参数,就是 bridge 模式。使用 docker run -p 时,docker 实际是在 iptables 做了 DNAT 规则,实现端口转发功能。可以使用 iptables -vnL 查看。

如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个的 Network Namespace ,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

iptables 通过3个 chain(INPUT,FORWARD,OUTPUT)即可完成对网络流量的控制,其屏蔽了底层作 netfilter 的细节,常用案例:

使用 iptables -L 可以查看已设置的规则, iptables -D 可以删除规则,iptables 命令执行完是即时生效的,但是如果主机重启,已设置的规则就会丢失,这里可以使用 iptables-se 和 iptables-restore 。

iptables-se 将现有规则保存成文件,iptables-restore 从文件中恢复规则。

该命令执行后,docker 会在 iptables 自定义链 DOCKER 中定义转发规则,如果此时系统的 net.ipv4.ip_forward 为0,该命令执行完会提示:WARNING: IPv4 forwarding is disabled. Networking will not work,只需打开该配置就行了,无需重启容器。

此时查看 DOCKER 链可以看到添加了一条允许所有来源转发到6379端口的流量,用 redis-cli 也可以顺利连上,如果我们手动执行:

发现现在 redis-cli 连不上了~ 将命令中的 -I 换成 -D 删除即可。

开发中,经常会遇到容器里面放问宿主机的情况,除了使用 host.docker.internal 之外,还可以配置 extra_hosts 解决,因为 docker0 与 宿主机是相通的,直接用 ifconfig 查看宿主机 en0 网卡的ip地址,配置到 extra_hosts 即可,如:

iptables 在 centos 系列正在逐渐被 firewalld 替换,firewalld 底层也是作的 iptables ,在同时作这两个工具的时候就容易出现互相覆盖影响的情况,建议两个不要同时使用,使用其一即可。

如何获取 docker 容器的 ip 地址

使用 none 模式,Docker 容器拥有自己的 Network Namespace,但是,并不为Docker 容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。

客户机获取DHCP主要分为4个步骤:1.IP租用请求:

DHCP客户机初始化TCP/IP,通过UDP端口67向网络中发送一个DHCPDISCOVER广播包,请求租用IP地址。该广播包中的源IP地址为0.0.0.0,目标IP地址为255.255.255.255;包中还包含客户机的MAC地址和计算机名。

2.Docker 容器使用虚拟 IP,当 Docker 中的服务 A,向 Nacos 注册的时候,Nacos 获取到了 Docker 的内部 IP,导致另外一个服务 B,想通过注册中心调用服务 A,但由于服务 B从 nacos 注册中心获取到的是服务 A 的内部 IP,这样导致了两个处于公网的微服务之间无法互相访问。IP租用提供:

任何接收到DHCPDISCOVER广播包并且能够提供IP地址的DHCP,都会通过UDP端口68给客户机回应一个DHCPOFFER广播包,提供一个IP地址。该广播包的源IP地址为DCHPIP,目标IP地址为255.255.255.255;包中还包含提供的IP地址、子网掩码及租期等信息。

3.IP租用选择:

所有其他的DHCP撤消它们的提供以便将IP地址提供给下一次IP租用请求。

4.IP租用确认:

被客户机选择的DHCP在收DHCPREQUEST广播后,会广播返回给客户机一个DHCPACK消息包,表明已经接受客户机的选择,并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。

客户机在收到DHCPACK包,会使用该广播包中的信息来配置自己的TCP/IP,则租用过程完成,客户机可以在网络中通信。

DHCP客户机在发出IP租用请求的DHCPDISCOVER广播包后,将花费1秒钟的时间等待DHCP的回应,如果1秒钟没有的回应,它会将这一广播包重新广播四次(以2,4,8和16秒为间隔,加上1~1000毫秒之间随机长度的时间)。四次之后,如果仍未能收到的回应,则运行Windows 2000的DHCP客户机将从169.254.0.0/16这个自动保留的私有IP地址(APIPA)中选用一个IP地址,而运行其他作系统的DHCP客户机将无法获得IP地址。DHCP客户机仍然每隔5分钟重新广播一次,如果收到某个的回应,则继续IP租用过程。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息