收听EADDRINUSE:地址已在使用->不管我使用哪个端口?

时间:2020-05-28 15:46:29

标签: node.js ubuntu port ubuntu-20.04

NodeJS版本:LTS 12.17这样安装:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs

我有一个很奇怪的问题:

我的一个NodeJS应用突然报告:listen EADDRINUSE: address already in use,无论将哪个端口号更改为#,它都无济于事。

完整的跟踪堆栈如下所示:

Error: listen EADDRINUSE: address already in use 0.0.0.0:6080
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at doListen (net.js:1498:7)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)

我正在这样听(_wl = Winston记录器实例):

> _server.listen(_port, '0.0.0.0', function () { _wl.info('SERVER STARTED! (listening on port # ' + _port + ')')});

我刚刚设置了这个AWS EC2 Ubuntu 20.04实例-所以我想它与此有关。它已经在许多不同实例的Windows上运行了多年(我想我从未在Ubuntu上运行过它)。

我像这样执行:

1. cd into folder
2. node ./server.js (I have also tried to use Sudo)

它与权限有关吗?

我尝试允许技术安全组中的服务器进行所有进出流量。

我检查过Ubuntu 20.04中的防火墙是否也已禁用。

此外,在同一台服务器上,我正在运行一个Python应用程序,该应用程序公开了Web套接字服务器,而NodeJS应用程序没有问题可以订阅此连接...

是的-我尝试检查服务器上所有正在使用的端口,并且只有几个端口正在使用。 NodeJS应用程序还尝试在给定端口公开Websocket服务器-但是无论我尝试使用哪个端口,都会收到上述错误。

1 个答案:

答案 0 :(得分:0)

对不起!

我在NodeJS应用程序中使用express,并且大多数应用程序包含以下行:

app.listen(port); // In this case port # 6080

稍后在当前应用程序中(我遇到上述问题),我还初始化了Web套接字服务器,如下所示:

const _server = require('http').createServer();
_server.on('request', app);
_server.listen(_port, '0.0.0.0', function () { _wl.info('WEB SOCKET SERVER STARTED! (listening on port # ' + _port + ')')});
port_port上方代码中的

使用相同的ENV变量/设置(6080)。在这种情况下,对我的app / Express进行操作实际上并没有使用app.listen(port),并且Windows随后选择使用相同的端口号初始化Web套接字服务器时,Windows仅选择否决该端口的用例。这就是为什么我从未在Windows上遇到任何问题的原因。但是Linux / Ubuntu在这方面更加敏感。

干杯! :-)