绑定到临时端口,强制进入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.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b8f7da2c97090cb0801949dec1d6d40c97220505b742a70935ffbd43234c14b2 |
|
MD5 | edfd1f2b984da8a6bc28980663e0c849 |
|
BLAKE2b-256 | ef933f0b75f75f94227f67ccfe86f989415e40ac054dd67b55dfac7abdc0a2d2 |
关闭
ephemeral_port_reserve-1.1.4-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dae8da99422c643bb52478ed55d5a8428099092391656ba3726ff30c801600c8 |
|
MD5 | 6e16a28db2faf59968787c3597d41aed |
|
BLAKE2b-256 | 2d2f28948390896745afd561dad6a39daf49f74637b7b3398582a649b5acc4c5 |