设置

设置

设置

我有这样的设置:

  • Windows 10 pro带有WSL2内部Ubuntu 20.04
  • 在 Ubuntu 中,我有一个运行docker engine良好的程序,它已经运行了几个月,公开了多个端口范围,包含数十个图像和容器。一切都很完美。

NFS 版本 3 和端口 111

今天在玩一个 NFS 服务器,必须运行在版本 3 上。111除了 port 之外,还需要Port 2049。最初的测试是用 image 进行的erichough/nfs-server

我把问题缩小到了这个最小失败示例:

如果我这样做:

docker run -it --rm -p 111:111 alpine

我明白了:

docker: Error response from daemon: driver failed programming external connectivity on endpoint hardcore_kilby (9aa7466f1771c9b5926a00eede289fc1084a12ee09ea2f3deee917c4734034c9): Error starting userland proxy: listen tcp4 0.0.0.0:111: bind: address already in use.

docker 在 111 端口上运行失败

这表明该端口111被主机使用。

丢弃它与知名港口范围我绑定了一个不同的端口:112而不是111,并且成功了:

docker 在 112 端口运行正常

因此我认为有一个进程正在监听端口111

111 端口没人吗?

StackOverflow 上的回答资源监控可以完成查找“哪个进程阻塞了端口”的任务。我启动了它,按“端口”对“正在监听的端口”列表进行了排序,然后……

哦,惊喜!!!端口上没有人监听111

端口 111 未被使用

RPC 是否阻塞端口?

以下是@Drixter 的回答建议netstat -tapneu查看该端口是否111被RPC阻塞。

在 Linux 方面

netstat -tapneu仅适用于 WSL 的 Linux 端并报告111正在使用的端口。

在 Windows 方面

在 WSL 的 Windows 端(例如通过 git-bash),该-u选项不存在,该-e选项将结果折叠为统计数据,并且-p需要一个额外的参数。所以我将范围缩小到netstat -tannetstat -n

没有任何这些报告端口111

深入了解

我的电脑在局域网中有一个固定的 IP 地址192.168.3.xx。如果我为选项指定 IP -p,我可以看到端口111只用于环回:(127.0.0.1也用于其他lo地址,如127.0.0.2127.0.0.3等),但端口是自由的在 LAN 地址上:

查看 IP 地址失败

为什么?

  • 为什么会发生这种情况?
  • 在我的情况下,IP 是静态的。我是否应该只将111Docker 容器暴露给 LAN 地址上的主机,并且永远不能在该地址中完成localhost
  • 难道是端口111被使用了但是“检测不到”?
  • 我能否查看我是否确实有这个 RPC 东西以及它在 Windows 端的状态?

答案1

您确定 RPC 没有使用端口 111 吗?

netstat -tapneu | grep 111

答案2

我很好奇。

那么,它说“端口正在使用”,以下 powershell 命令的输出是什么?

Get-Process -Id (Get-NetTCPConnection -LocalPort 111).OwningProcess | Format-List *

这应该会生成一个在 Windows 中监听该端口的进程列表。我只是好奇它是否会提供与资源监视器相同的信息。

如果上述 powershell 没有输出,则

 sudo ss -tulpn | grep 111

在 WSL 中运行应该提供 Linux 子系统中监听该端口的任何内容的 pid。

这些至少应该可以明确地告诉您它是否是原始端口碰撞,或者是否实际上没有任何东西在监听该端口并且发生了一些更奇怪的事情。

相关内容