Nodejs 在 ubuntu 上运行使用 8080 端口报错提示被占用?求解

Nodejs 在 ubuntu 上运行使用 8080 端口报错提示被占用?求解

如题,查看运行进程也没发现占用8080端口的程序

3 回复

当然可以!以下是针对“Nodejs 在 Ubuntu 上运行使用 8080 端口报错提示被占用?求解”的帖子内容:


Node.js 在 Ubuntu 上运行使用 8080 端口报错提示被占用?求解

问题描述

如题,在 Ubuntu 上运行 Node.js 应用时,尝试绑定到 8080 端口,但遇到了端口被占用的错误。尽管通过 netstatlsof 查看并没有发现有其他进程占用该端口。

解决方法

  1. 检查端口占用情况

    • 使用 netstat 命令来检查端口占用情况:
      sudo netstat -tuln | grep 8080
      
    • 如果没有输出结果,说明没有其他进程占用了 8080 端口。
    • 另一个命令是 lsof
      sudo lsof -i :8080
      
  2. 检查防火墙设置

    • 有时候,防火墙规则可能会阻止某些端口的访问。可以检查并临时关闭防火墙进行测试:
      sudo ufw disable
      
    • 如果这解决了问题,你可以重新配置防火墙规则以允许 8080 端口的访问。
  3. 尝试不同的端口号

    • 如果上述方法都没有解决问题,可以尝试使用其他端口号,例如 3000 或 4000,看看是否能正常运行:
      const http = require('http');
      
      const hostname = '127.0.0.1';
      const port = 3000;
      
      const server = http.createServer((req, res) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello World\n');
      });
      
      server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
      });
      
  4. 重启系统

    • 有时系统层面的问题可能需要重启系统来解决。虽然不常见,但这也是一个选项。

示例代码

const http = require('http');

const hostname = '127.0.0.1';
const port = 8080; // 也可以改为 3000 或其他未被占用的端口

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

希望这些步骤能够帮助你解决端口占用的问题。如果问题依然存在,请提供更多详细信息以便进一步排查。


希望这个答案对你有所帮助!


netstat -anp 显示系统端口使用情况 或者lsof -i :8080 查看占用该端口的进程情况 我的印象中 应该是被tomcat占用了吧

当你在 Ubuntu 上运行 Node.js 应用并使用 8080 端口时,如果遇到端口被占用的错误提示,但通过 netstatlsof 命令却查不到占用该端口的进程,可以尝试以下几种方法来解决这个问题。

  1. 检查所有网络接口上的端口: 默认情况下,lsof -i :8080 只会检查 IPv4 和 IPv6 的本地回环地址。确保你检查了所有可能的接口。你可以使用以下命令检查:

    sudo lsof -i :8080
    

    或者

    sudo netstat -tuln | grep 8080
    
  2. 重启系统: 有时系统或某些服务需要重启才能释放端口。虽然不常见,但作为最后的手段可以尝试重启系统。

  3. 检查 Node.js 应用是否有多个实例在运行: 确保你的应用没有意外地启动了多个实例。你可以通过以下命令查看 Node.js 进程:

    ps aux | grep node
    
  4. 使用不同的端口测试: 如果上述方法都不奏效,可以尝试使用其他端口,例如 8081 或 3000 来确认问题是否与端口绑定有关。

  5. 防火墙设置: 检查系统的防火墙设置,确保没有规则阻止你连接到 8080 端口。

示例代码: 如果你正在编写一个简单的 Node.js 应用来测试端口绑定,可以使用以下代码:

const http = require('http');

const hostname = '0.0.0.0';
const port = 8080;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

保存上述代码到 app.js 文件中,然后使用以下命令启动服务器:

node app.js

如果一切正常,你应该能看到类似 Server running at http://0.0.0.0:8080/ 的输出信息。如果仍然出现问题,请检查上面提到的其他排查步骤。

回到顶部