docker 如何管理容器的 IP 地址?
How does docker manage containers' IP addresses?
在未指定 IP 地址的情况下在用户定义的桥接网络中创建容器时,启动的容器将从 IP 范围的开头开始分配 IP 地址。当一个容器宕机时,它的 IP 地址再次可用,以后可以被另一个容器使用。 Docker 还会检测重复的 IP 并在提供无效地址时引发异常。就我的研究而言,docker 守护进程不依赖于任何 DHCP 服务。那么 Docker 如何实际找出新容器的 use/available 中有哪些 IP 地址?此外,docker 网络插件(例如 docker-go-plugin
)如何做同样的事情?
我认为这里的关键字之一是 IPAM,但除此之外我什么都不知道。我将不胜感激为我指明正确方向的每一条信息。
Docker 是一项服务。每当您启动容器时,它都会要求 Docker 服务完成所有必要的工作。每当您创建 docker 网络时,都会定义 IP 地址。 Docker 如果您自己不这样做,也可以创建新网络。据我所知,他们使用 172.16.0.0 – 172.31.255.255 范围内的 IP。这些都是私有IP地址。默认情况下,它们从我所看到的 172.19.0.0 开始。您还可以使用您喜欢的任何 IP 范围创建自己的网络。然后将容器添加到该网络,将使用下一个可用 IP。每当您终止一个容器时,它的 IP 地址就会再次可用,因此 Docker 服务可以将它重新添加到 该列表 。
此 Docker documentation 表示您可以将此机制视为类似于 DHCP,尽管 Docker 服务负责分配。
我不知道它是如何实现的。可能是一个列表,尽管他们可能使用位图。对于 65536 个 IP,您的地图必须仅为 64Kb / 8 = 8Kb,因此它非常小。然后每一位都会告诉您 IP 是否正在使用中。但是,如果它们必须支持 IPv6,那么这样的地图就不太实用了。太大了。他们还可以检查现有容器的列表,并尝试分配当前未使用的尽可能小的 IP。
在未指定 IP 地址的情况下在用户定义的桥接网络中创建容器时,启动的容器将从 IP 范围的开头开始分配 IP 地址。当一个容器宕机时,它的 IP 地址再次可用,以后可以被另一个容器使用。 Docker 还会检测重复的 IP 并在提供无效地址时引发异常。就我的研究而言,docker 守护进程不依赖于任何 DHCP 服务。那么 Docker 如何实际找出新容器的 use/available 中有哪些 IP 地址?此外,docker 网络插件(例如 docker-go-plugin
)如何做同样的事情?
我认为这里的关键字之一是 IPAM,但除此之外我什么都不知道。我将不胜感激为我指明正确方向的每一条信息。
Docker 是一项服务。每当您启动容器时,它都会要求 Docker 服务完成所有必要的工作。每当您创建 docker 网络时,都会定义 IP 地址。 Docker 如果您自己不这样做,也可以创建新网络。据我所知,他们使用 172.16.0.0 – 172.31.255.255 范围内的 IP。这些都是私有IP地址。默认情况下,它们从我所看到的 172.19.0.0 开始。您还可以使用您喜欢的任何 IP 范围创建自己的网络。然后将容器添加到该网络,将使用下一个可用 IP。每当您终止一个容器时,它的 IP 地址就会再次可用,因此 Docker 服务可以将它重新添加到 该列表 。
此 Docker documentation 表示您可以将此机制视为类似于 DHCP,尽管 Docker 服务负责分配。
我不知道它是如何实现的。可能是一个列表,尽管他们可能使用位图。对于 65536 个 IP,您的地图必须仅为 64Kb / 8 = 8Kb,因此它非常小。然后每一位都会告诉您 IP 是否正在使用中。但是,如果它们必须支持 IPv6,那么这样的地图就不太实用了。太大了。他们还可以检查现有容器的列表,并尝试分配当前未使用的尽可能小的 IP。