+-
docker如何为容器自动分配和回收端口
当我运行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或任何OS都需要一段时间才能收回端口,但netstat -lntu确认该端口不再使用.

因此,我的理论是(它可能是完全错误的,在这种情况下,我很高兴得到纠正),它创建了PortAllocator实例的一个实例,因此具有状态.因此,下次调用docker run -P …时,它将进入下一个可用端口.即使在创建其他容器时,泊坞窗引擎也会为您提供下一个可用端口,而不是先前尚未提供的端口,这一事实也得到了证实.

希望我回答了您的问题,我对golang的了解不多,请原谅术语中的任何错误.

点击查看更多相关文章

转载注明原文:docker如何为容器自动分配和回收端口 - 乐贴网