在未指定IP地址的情况下在用户定义的桥接网络中创建容器时,将从IP范围的开头开始为启动的容器提供IP地址。当某个容器发生故障时,其IP地址将再次变为可用,以后可以由另一个容器使用。 Docker还检测重复的IP,并在提供无效地址时引发异常。就我的研究而言,docker守护程序不依赖于任何DHCP服务。那么Docker如何真正找出新容器正在使用/可用的IP地址?此外,Docker网络插件(例如docker-go-plugin
)如何做同样的事情?
我认为这里的关键字之一是IPAM,但除此之外我什么都不知道。我会很高兴每条信息都为我指明了正确的方向。预先感谢。
答案 0 :(得分:1)
Docker是一项服务。每当您启动容器时,它都会要求Docker服务完成所有必要的工作。每当您创建docker网络时,都会定义IP地址。如果您自己不这样做,Docker也可以创建新的网络。从我所见,他们使用的IP在172.16.0.0 – 172.31.255.255范围内。这些都是私有IP地址。默认情况下,根据我所见,它们以172.19.0.0开头。您还可以使用任意IP范围创建自己的网络。然后将容器添加到该网络,然后将使用下一个可用IP。每当您杀死一个容器时,它的IP地址就会再次可用,因此Docker服务可以将其重新添加到该列表中。
此Docker documentation表示,尽管Docker服务负责分配,您仍可以认为此机制类似于DHCP。
我不知道它是如何实现的。可能是列表,尽管他们可能使用位图。对于65536个IP,您的地图必须仅为64Kb / 8 = 8Kb,因此非常小。然后每一位都会告诉您IP是否正在使用。但是,如果他们必须支持IPv6,那么这样的映射将不切实际。太大了。他们还可以检查现有容器的列表,并尝试分配当前未使用的最小IP。