gpt4 book ai didi

docker - docker如何自动为容器分配和回收端口

转载 作者:行者123 更新时间:2023-12-02 07:04:41 25 4
gpt4 key购买 nike

当我运行 docker 命令时

docker run -d -P nginx

docker 将运行并自动为 nginx 的端口 80 分配端口。如果我停止镜像并再次启动它,则会为 nginx 分配一个新端口(通常是下一个可用端口)。

据我所知,端口分配的范围基于临时端口范围,在 docker 情况下默认为 32768 - 61000。( https://docs.docker.com/v17.09/engine/userguide/networking/default_network/binding/ )

docker 如何以及何时回收端口?它会返回到 32768 或最近的可用值吗?

最佳答案

我花了很多时间才找到答案,但是docker没什么作用。

我潜入docker-ce源文件,发现它使用了一个函数 RequestPortInRange它只是给出下一个可用端口。

现在,当您运行 docker run -d -P nginx 时命令,docker 为您提供“临时范围”中的第一个可用端口,即 32768 - 61000 (正如您所指出的)。

一旦你销毁/停止容器,它应该恢复到 32768 ,但是,它会转到下一个可用端口,即 32769 (至少在我的电脑上)。

所以,我想 linux 可能需要一些时间或任何操作系统在容器被销毁后收回端口,但 netstat -lntu确认该端口不再使用。

所以,我的理论是(这可能是完全错误的,在这种情况下我很高兴得到纠正),它创建了 PortAllocator 的一个实例。事物,因此它有一个状态。那么,下次docker run -P ...被调用时,它将前往下一个可用端口。即使您创建其他容器,docker engine 也证实了这一点。正在为您提供下一个可用端口,而不是之前可用的端口。

我希望我回答了你的问题,但我不太了解 golang因此,请原谅任何术语错误。

关于docker - docker如何自动为容器分配和回收端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53265885/

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