gpt4 book ai didi

docker - docker 是如何管理容器的 IP 地址的?

转载 作者:行者123 更新时间:2023-12-02 18:28:01 25 4
gpt4 key购买 nike

当在用户定义的桥接网络中创建容器而不指定 IP 地址时,启动的容器会被赋予从 IP 范围的开头开始的 IP 地址。当一个容器出现故障时,它的 IP 地址会再次可用,以后可以被另一个容器使用。 Docker 还会检测重复的 IP,并在提供无效地址时引发异常。就我的研究而言,docker 守护进程不依赖于任何 DHCP 服务。那么 Docker 如何真正确定哪些 IP 地址正在使用/可用于新容器?此外,docker 网络插件(例如 docker-go-plugin )如何做同样的事情?

我认为这里的关键字之一是 IPAM,但除此之外我什么都不知道。我会很感激每一条信息都能为我指明正确的方向。

最佳答案

Docker 是一种服务。每当您启动一个容器时,它都会要求 Docker 服务完成所有必要的工作。每当您创建 docker 网络时,都会定义 IP 地址。如果您自己不这样做,Docker 也可以创建新网络。据我所知,他们使用 172.16.0.0 – 172.31.255.255 范围内的 IP。这些都是私有(private) IP 地址。默认情况下,它们以我所看到的 172.19.0.0 开头。您还可以使用您想要的任何 IP 范围创建自己的网络。然后将容器添加到该网络,将使用下一个可用 IP。每当您杀死一个容器时,它的 IP 地址就会再次可用,因此 Docker 服务可以将其重新添加到该列表中。

这个Docker documentation说您可以认为这种机制类似于拥有 DHCP,尽管 Docker 服务负责分配。

我不知道它是如何实现的。可能是一个列表,尽管他们可能使用的是位图。对于 65536 个 IP,您的 map 必须只有 64Kb/8 = 8Kb,所以它非常小。然后每个位都会告诉您 IP 是否在使用中。但是,如果他们必须支持 IPv6,那么这样的 map 就不实用了。太大了。他们还可以检查现有容器的列表并尝试分配当前未使用的最小可能 IP。

关于docker - docker 是如何管理容器的 IP 地址的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56483184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com