docker-desktop 中有一个选项允许更改“Docker 子网”。而且我没有看到这个默认子网
192.168.65.0/28
在任何地方使用。
我尝试在每个 Docker 内部网络上
docker network inspect
,检查 docker-desktop WSL2 发行版和我的 Windows 主机的路由或 IP,但我没有看到在任何地方使用默认子网(即使在设置自定义子网时也是如此)。
这不会更改
docker network inspect bridge
或任何其他子网中使用的子网。
我正在努力寻找任何有关它是什么和/或它的用途的文档。
在很大程度上,这是您无需担心的内部实现细节。
您真正需要更改此值的唯一时间是您的主机网络具有相同的地址。在这种情况下,您可以将其更改为不冲突的任何内容。例如,如果您的主机网络恰好是 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 Desktop(适用于 Windows 或 macOS)中,容器不直接在系统内核上运行,它们在 Linux VM 内(对于 macOS)或 Hyper-V 内的容器内运行(对于 WSL 2)在 Windows 上)。
此子网是用于在 VM 或 Hyper-V 容器中运行的 Docker 守护程序环境的网络。
在 macOS 上,您可以使用以下命令进入 Docker VM 并查看周围。
docker run -it --rm --privileged --pid=host justincormack/nsenter1
(我不确定这个命令在Windows上是否有效,而且我没有系统可以测试它,但你可以尝试一下。)
在 Docker VM 中,您可以查看网络配置,您会在那里找到该子网。
/ # 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
不过,您从此环境中启动的“容器”不使用此网络。它们也是从 在这里您可以看到172.17.0.0/16正在使用中。这是 RFC 1918中发现的较大 172.16.0.0/12 分配的一部分。
如果您询问的子网用于容器,您很快就会用完地址,因为 /28 网络只有 14 个可用地址(13 个,如果您意识到 Docker VM 自己使用一个)。而容器的 /16 网络有 65,534 个可用地址。
Docker Desktop 使用私有 IPv4 网络来提供内部服务,例如 DNS 服务器和 HTTP 代理。如果子网的选择与您环境中的某些内容发生冲突,请使用网络设置指定自定义子网
。Windows 版 Docker Desktop 用户手册
您可以配置 Docker Desktop 网络以在虚拟专用网络 (VPN) 上工作。指定网络地址转换 (NAT) 前缀和子网掩码
以启用互联网连接。Docker Desktop\Windows 版 Docker Desktop 中的网络功能
了解 Docker 网络并解决与 Docker 子网 IP 范围的冲突!
在这里您可以找到一个示例案例,通过更改 Docker 子网 IP 范围来解决连接 IP 在 172.17.
.范围内的外部资源时出现的网络冲突和NoRouteToHostException 错误。 注:
默认情况下,每个容器都连接到 Docker Bridge Network 并获取 IP 或范围172.17.. 将容器默认网桥 IP 范围更改为 172.26.
.解决了问题。