大多数情况下,这是您不需要担心的内部实现细节。
唯一需要更改此值的情况是您的主机网络具有相同的地址。 在这种情况下,您可以将其更改为任何不冲突的值。 例如,如果您的主机网络是192.168.65.0/24,则可以将Docker网络更改为192.168.66.0/24(或/28),这将正常工作。
在内部,容器具有单独的IP地址,这是它们获得的默认子网。 如果您docker network create
一个网络或使用Docker Compose,则会分配一个新的子网。 这几乎完全是一个实现细节,您永远不需要知道这些地址:从Docker外部,您无法访问这些地址(*),而在Docker内部,它提供了一个DNS系统,因此您可以使用容器名称作为主机名。
更具体地说,如果您
docker run --rm busybox ifconfig
你将会看到来自这个子网的一个地址。
(*) ...除非是从实际运行容器的本机Linux主机控制台连接; 但不适用于其他主机,或者如果你正在使用Docker Toolbox或Docker Desktop。
docker run -it --rm --privileged --pid=host justincormack/nsenter1
(我不确定这个命令在Windows上是否有效,也没有系统进行测试,但你可以尝试一下看看。)
在Docker虚拟机内部,您可以查看网络配置,您会在那里找到此子网。
/ # ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 02:50:00:00:00:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.65.3/24 brd 192.168.65.255 scope global dynamic noprefixroute eth0
valid_lft 7019sec preferred_lft 5579sec
inet6 fe80::50:ff:fe00:1/64 scope link
valid_lft forever preferred_lft forever
/ # ip route show | grep 192.168.65
default via 192.168.65.1 dev eth0 proto dhcp src 192.168.65.3 metric 202
192.168.65.0/24 dev eth0 proto dhcp scope link src 192.168.65.3 metric 202
192.168.65.5 dev services1 proto kernel scope link src 192.168.65.4
/ # cat /etc/resolv.conf
# DNS requests are forwarded to the host. DHCP DNS options are ignored.
nameserver 192.168.65.5
15: eth0@if16: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ # ip route
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 scope link src 172.17.0.2
在这里,您可以看到172.17.0.0/16正在使用。这是在RFC 1918中发现的更大的172.16.0.0/12分配的一部分。
如果您问及的子网用于容器,则很快会用完地址,因为/28网络仅有14个可用地址(如果您意识到Docker VM自己使用一个地址,则只有13个)。而容器的/16网络中有65534个可用地址。
Docker Desktop 使用私有 IPv4 网络用于内部服务,如 DNS 服务器和 HTTP 代理。如果所选的子网与您的环境中的某些内容冲突,请使用网络设置指定自定义子网。
Docker Desktop for Windows 用户手册
您可以配置 Docker Desktop 网络以在虚拟专用网络 (VPN) 上工作。指定网络地址转换 (NAT) 前缀和子网掩码以启用 Internet 连通性。
Windows 版 Docker Desktop 中的 Docker Desktop 网络功能
了解 Docker 网络并解决与 Docker 子网 IP 范围的冲突!
在这里,您可以找到一个示例案例,解决了连接到IP范围为172.17. 的外部资源时出现的网络冲突和NoRouteToHostException错误,方法是更改Docker子网IP范围。
注意:默认情况下,每个容器都附加到Docker Bridge Network,并获得IP或范围172.17. 。
将容器的默认Bridge IP范围更改为172.26. 解决了问题。