返回

如何解决 Kestrel 端口已使用的错误?

Linux

解决 Kestrel 端口已使用的错误

问题陈述

在 Linux CentOS 7 服务器上部署 .NET Core 2.1 Web 应用程序时,尝试使用 "sudo dotnet application_name.dll" 运行应用程序时,可能会收到以下错误消息:

crit: Microsoft.AspNetCore.Server.Kestrel[0]
      Unable to start Kestrel.
System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use. ---> Microsoft.AspNetCore.Connections.AddressInUseException: Address already in use ---> System.Net.Sockets.SocketException: Address already in use

根本原因

此错误表明端口 5000 已被其他进程使用,因此 Kestrel 无法绑定到该端口。

解决方案

要解决此问题,请执行以下步骤:

1. 查找正在使用端口 5000 的进程

使用以下命令查找正在使用端口 5000 的进程:

sudo netstat -ntlp | grep 5000

2. 停止或关闭正在使用端口 5000 的进程

找到正在使用端口 5000 的进程后,使用以下命令停止或关闭它:

sudo kill -9 <process_id>

其中 <process_id> 是正在使用端口 5000 的进程的 ID。

3. 重新运行你的应用程序

停止或关闭正在使用端口 5000 的进程后,重新运行你的应用程序:

sudo dotnet application_name.dll

你的应用程序现在应该能够成功运行。

附加提示

  • 更改应用程序端口

为了避免将来出现此问题,你可以使用不同的端口。通过修改 launchSettings.json 文件中 applicationUrl 属性的端口号可以实现这一点。

  • 检查 Nginx 配置

如果你使用的是 Nginx 作为反向代理,请确保你的 Nginx 配置已正确设置,并且你的应用程序正在侦听 Nginx 代理的端口。

  • 重新检查

如果你仍然遇到问题,请确保你的防火墙允许端口 5000 的传入连接。

常见问题解答

1. 为什么会出现端口已使用的错误?

端口已使用的错误表明端口 5000 已被其他进程使用。

2. 如何找到正在使用端口 5000 的进程?

使用命令 "sudo netstat -ntlp | grep 5000"。

3. 为什么停止其他进程可以解决问题?

停止其他进程释放了端口 5000,从而使 Kestrel 能够绑定到它。

4. 如何避免将来出现此问题?

你可以通过更改应用程序端口或确保没有其他进程使用端口 5000 来避免将来出现此问题。

5. 如果我仍然遇到问题该怎么办?

检查你的防火墙设置,确保它允许端口 5000 的传入连接。