Docker网络工作原理及IP分配、本地访问解析技术咨询
Docker容器IP分配与本地访问解析
Great question—let’s break this down step by step, since Docker’s networking can feel a bit opaque at first!
一、容器IP的来源
Docker manages its own internal networking stack, and here’s how it assigns IPs to containers:
- 默认桥接网络: 安装Docker时,它会自动创建一个名为
docker0的桥接网络,带有一个私有子网(默认通常是172.17.0.0/16)。除非你指定自定义网络,否则容器默认都会连接到这个网络。 - IP地址管理(IPAM): Docker内置的IPAM组件会跟踪子网中已使用的IP。当你启动新容器时,它会从这个池中获取下一个未使用的IP,分配给容器的虚拟网络接口。
- 自定义网络: 如果你用
docker network create --subnet 192.168.1.0/24 my-custom-net创建自己的网络,Docker会从你指定的子网中分配IP,而非默认池。自定义网络还自带更优的容器间DNS解析能力,算是额外福利。 - 虚拟网络接口: 每个容器都会获得一个虚拟网络接口(veth pair),一端在容器内部(通常是
eth0),另一端连接到主机的桥接接口——这就是容器能与主机、其他容器通信的基础。
二、本地访问容器时的IP识别逻辑
当你在浏览器输入<IP>:<PORT>时,具体的识别逻辑取决于你用的是哪个IP:
场景1:使用容器的私有IP
- 由于容器连接到Docker桥接(主机上的一个虚拟网络接口),你的电脑会识别这个私有IP属于本地网络段。主机的路由表中有一条条目,会将该子网的流量导向Docker桥接,请求直接转发到容器的虚拟接口。
- 注意:这种方式仅在Docker运行的同一主机上有效。如果你从本地网络的另一台机器尝试访问容器私有IP,默认情况下是行不通的——这些IP在主机外不可路由,除非你配置额外的网络规则。
场景2:使用主机的公网/私有IP(配合端口映射)
- 如果你启动容器时用了端口映射,比如
docker run -p 8080:80 my-app,Docker会在主机上设置iptables规则。这些规则会拦截主机8080端口的入站流量,转发到容器的IP和80端口。 - 当你输入
localhost:8080或<host-ip>:8080时,电脑先将IP解析到自己的主机,之后iptables规则会在后台处理流量重定向,把请求送到对应的容器。
内容的提问来源于stack exchange,提问作者mux
相关产品推荐
相关产品推荐

