首页 > 编程知识 正文

docker查看端口映射(docker删除端口映射)

时间:2023-05-05 03:26:24 阅读:96624 作者:4358

概述

今天,我们将介绍Docker的一些高级网络配置和选项。

Docker启动后,会自动在主机上创建一个docker0虚拟桥,实际上是Linux的一个桥,可以理解为一个软件交换机。它将在安装到它的端口之间转发。

同时,Docker会在本地未被占用的专用网段(在RFC1918中定义)中随机分配一个地址给docker0接口。例如,典型的172.17.42.1的掩码为255.255.0.0。之后,启动的容器中的网络端口将被自动分配一个相同网段(172.17.0.0/16)的地址。

创建Docker容器时,会同时创建一对vethpair接口(当一个数据包发送到一个接口时,另一个接口也可以接收到相同的数据包)。这对接口的一端在容器中,即eth0;另一端是本地的,并安装到docker0桥,其名称以veth开头(例如,vethAQI2QT)。这样,主机可以与容器通信,容器也可以相互通信。Docker在主机和所有容器之间创建一个虚拟共享网络。

码头网络

00-1010容器的访问控制主要由Linux上的iptables防火墙管理和实现。Iptables是Linux上的默认防火墙软件,在大多数发行版中都附带了它。

篇幅有限,这里就不多说iptables了~

如果

容器访问控制

容器想要访问外部网络,它需要本地系统的转发支持。在Linux系统中,检查转发是否打开。

$sysctlnet.ipv4.ip_forward

net.ipv4.ip_forward=1

如果为0,则表示转发未开启,需要手动开启。

$sysctl-w net.ipv4.ip_forward=1

容器访问外部网络

容器之间的相互访问需要两方面的支持。

容器的网络拓扑是否互联。默认情况下,所有容器都连接到docker0桥。

是否允许系统的本地防火墙软件- iptables通过。

容器之间访问

默认情况下,容器可以主动访问与外部网络的连接,但外部网络无法访问容器。

容器访问外部实现

从容器到外部网络的所有连接,源地址都将被NAT到本地系统的IP地址。这是通过使用iptables的源地址伪装操作来实现的。

检查主机的NAT规则。

其中,上述规则将所有源地址为172.17.0.0/16网段、目的地址为其他网段(外部网络)的流量动态伪装为源自系统网卡。假面舞会和传统SNAT的优点是可以从网卡动态获取地址。

外部访问容器实现

允许对容器的外部访问,这可以通过-p或-P参数启用。

无论哪种方式,相应的规则实际上都被添加到本地iptable的nat表中。

带-P:

使用-p80:80时:

注意:

这里的规则映射到0.0.0.0,这意味着来自主机所有接口的流量都将被接受。用户可以指定IP、接口等。在允许通过-pip 3360 host _ port 3360 container _ port或-pip33603360port访问容器的主机上,以便制定更严格的规则。

如果您想永久绑定到固定的IP地址,您可以将以下内容添加到Docker配置文件/etc/docker/daemon.json中:

{

ip':'0.0.0.0 '

}

映射容器端口到宿主主机的实现

Docker服务默认会创建一个dock r0桥(上面有一个dock r0内部接口),与内核层的其他物理或虚拟网卡连接,将所有容器和本地主机放在同一个物理网络中。

Docker默认指定docker0接口的IP地址和子网掩码,这样主机和容器就可以通过网桥相互通信。它还给出了MTU(接口允许接收的最大传输单位),通常为1500字节,或者主机网络路由支持的默认值。这些值可以在服务启动时配置。

您还可以配置

文件中配置DOCKER_OPTS,然后重启服务。

由于目前Docker网桥是Linux网桥,用户可以使用 brctlshow 来查看网桥和 端口连接信息。

$ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.3a1d7362b4ee no veth65f9 vethdda6

每次创建一个新容器的时候,Docker从可用的地址段中选择一个空闲的IP地址分 配给容器的eth0端口。使用本地主机上docker0接口的IP作为所有容器的默认 网关。

自定义网桥

除了默认的docker0网桥,用户也可以指定网桥来连接各个容器。

在启动Docker服务的时候,使用-bBRIDGE或--bridge=BRIDGE来指定使用 的网桥。

如果服务已经运行,那需要先停止服务,并删除旧的网桥。

$ sudo systemctl stop docker $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0

然后创建一个网桥 bridge0。

$ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.5.1/24 dev bridge0 $ sudo ip link set dev bridge0 up

查看确认网桥创建并启动。

在Docker配置文件 /etc/docker/daemon.json 中添加如下内容,即可将 Docker默认桥接到创建的网桥上。

{ "bridge": "bridge0", }

启动Docker服务。

新建一个容器,可以看到它已经桥接到了 bridge0 上。

可以继续用brctlshow命令查看桥接的信息。另外,在容器中可以使用ip addr和iproute 命令来查看IP地址配置和路由信息。


docker网络还是比较复杂的(对于我这种网络空白的来说),篇幅有限,关于docker网络配置就介绍到这里了,感兴趣的朋友可以测试下~

后面会分享更多关于devops和DBA内容,感兴趣的朋友可以关注下~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。