【问题标题】:Error: listen EADDRINUSE: address already in use :::3000 - Digitalocean错误:监听 EADDRINUSE:地址已在使用 :::3000 - Digitalocean
【发布时间】:2020-09-01 04:05:01
【问题描述】:

我最近关注了video chat tutorial,并希望将其托管在 Digitalocean 上以测试一些 webRTC 内容。我让它工作,甚至把它托管在 Heroku 上。但是,当我将它托管在一个未使用的 droplet 上(用完最初 100 美元的免费 Digitalocean 信用额度)并通过 SSH 连接到我的 droplet 并运行 npm start(是的,虽然它不在教程 github 代码中,npm start package.json),我得到一个错误。

USER***@nodejs-s-1vcpu-1gb-sfo2-01:~/DIRNAME$ sudo npm start

> livestream-server@0.0.1 start /home/USER***/DIRNAME
> node app.js

events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1447:7)
    at Object.<anonymous> (/home/USER***/ZMP_Solutions/app.js:17:8)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1340:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 3000
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! livestream-server@0.0.1 start: `node app.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the livestream-server@0.0.1 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

我已经阅读了read this related question 并尝试了很多东西,例如在运行npm start 时使用sudo,或者将端口设置为高于3000,但没有任何帮助。有解决办法吗?

谢谢!

【问题讨论】:

    标签: node.js npm digital-ocean


    【解决方案1】:

    这意味着您有一个应用程序已经在使用端口 3000。可能是同一服务器的一个实例。

    您可以按如下方式关闭其他进程:

    sudo netstat -lntp | grep 3000
    

    查找使用端口 3000 的进程。获取该进程的 PID(进程 ID)。 PID 是一个类似PID/ProcessName 的数字,如输出中的234/node,其中 234 是 PID。在以下命令中使用它:

    sudo kill -9 PID
    

    填写你找到的PID。

    现在你可以正常运行你的服务器了,你不会再有这个错误了。

    【讨论】:

    • 什么是 PID?我运行 netstat 并得到:tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 939/node /var/www/h 整个事情都是 PID 吗?
    • @divinelemon 939 是 PID
    • 仍然抛出错误。我跑了:sudo kill -9 939,什么也没发生(询问我的密码),然后当我跑npm start 时,它抛出了同样的错误。
    • 您是否再次检查了运行netstat 命令是否仍有进程在运行?通常在你运行你的 kill 命令后它应该是空的
    • 我做了,什么都没有
    【解决方案2】:

    不要设置端口或更高。因为 heroku 或数字海洋将动态分配端口(任何可用的)

    const server = require('http').createServer();
    const port = process.env.PORT || 3000;
    
    server.listen(port, () => console.log(`Listening on ${port}`));
    

    【讨论】:

      【解决方案3】:

      这个问题实际上与 Digitalocean 上的防火墙有关。我所做的只是运行sudo ufw disable,它成功了!!

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 2021-02-26
        • 2020-11-09
        • 2020-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-25
        • 2020-10-12
        • 1970-01-01
        相关资源
        最近更新 更多