Docker-Compose端口映射后容器子网IP与网关不符问题咨询
为什么端口映射的IP和容器网关/IP不在同一子网?
核心原因:端口映射与容器网络是完全独立的两个概念
1. 端口映射的127.0.0.101属于宿主机网络
你配置的"127.0.0.101:80:80"是宿主机端口转发规则:意思是把宿主机回环网卡(lo)上绑定的127.0.0.101这个IP的80端口,转发到容器内部的80端口。这个IP完全属于宿主机的本地网络,和容器所在的私有网络没有直接归属关系。
2. 容器的网关/IP属于Docker自定义桥接网络
你定义的our_network是Docker的自定义桥接网络,这类网络会自动分配一个私有子网(比如这里的172.31.0.0/16):
- 容器IP
172.31.0.2是Docker从这个子网里分配给容器的专属地址; - 网关
172.31.0.1是Docker在宿主机上创建的虚拟桥接网卡(类似br-xxx命名)的IP,它是容器与外部(宿主机、其他网络)通信的转发节点。
3. 两者的关联仅在于流量转发,而非子网归属
端口映射本质是通过宿主机的iptables规则实现的流量转发——相当于在宿主机的127.0.0.101:80和容器的172.31.0.2:80之间建立了一条“流量通道”,但这并不会改变两个IP所在的子网划分。容器网络的核心作用是让同一网络内的容器互相通信(比如你配置的project1.local别名就是用于容器间访问),而端口映射是给外部(包括宿主机)提供访问容器的入口。
内容的提问来源于stack exchange,提问作者John Djuz
相关产品推荐
相关产品推荐

