跳转到主要内容

绑定到临时端口,强制进入TIME_WAIT状态,然后解绑。

项目描述

ephemeral-port-reserve

有时您需要一个可以绑定到无法硬编码的端口的网络程序。通常这是在您想要并行运行几个程序时;如果它们都绑定到端口8080,那么只有其中一个可以成功。

通常的解决方案是“端口0技巧”。如果您绑定到端口0,内核会找到一个未被使用的任意高编号端口并将其绑定。之后,如果您需要在其他地方使用端口号,可以查询实际绑定的端口。然而,有些情况下端口0技巧不起作用。例如,mysqld将端口0理解为“my.cnf中配置的端口”。Docker可以将容器绑定到端口0,但它使用自己的实现来找到一个空闲端口,在并行的情况下竞争和失败。

ephemeral-port-reserve提供了一个可靠且无竞争的端口0技巧实现。您可以这样使用它:

PORT="$(ephemeral-port-reserve)"
docker run -p 127.0.0.1:$PORT:5000 registry:2

ephemeral-port-reserve是一个将绑定到临时端口的实用程序,将其强制进入TIME_WAIT状态,并取消绑定的工具。

这意味着进一步的临时端口分配不会选择这个“已保留”的端口,但子进程可以在使用SO_REUSEADDR的情况下显式绑定到它。在Linux上,默认情况下您有60秒的宽限期来重用此端口。要检查您自己的特定值:

$ cat /proc/sys/net/ipv4/tcp_fin_timeout
60

注意:默认情况下,返回的端口专门用于localhost,即127.0.0.1。如果您绑定到0.0.0.0,您可能会遇到端口冲突。如果您需要绑定到非localhost IP,您可以将其作为第一个参数传递。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

ephemeral_port_reserve-1.1.4.tar.gz (3.5 kB 查看哈希值)

上传时间

构建分发

ephemeral_port_reserve-1.1.4-py2.py3-none-any.whl (4.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面