localhost 没有发送任何数据 ERR_EMPTY_RESPONSE nodejs

问题描述

我正在尝试将此应用程序转换为 docker,但出现此错误

这是我的 express.js 文件

const express = require("express");
const app = express();
const portNumber = 3000;
const sourceDir = "dist";
const expressstaticGzip = require("express-static-gzip");
app.use(
  "/",expressstaticGzip(sourceDir,{
    enablebrotli: true,orderPreference: ["br","gz"],setHeaders: function(res,path) {
      res.setHeader("Cache-Control","public,max-age=31536000");
    }
  })
);

app.listen(portNumber,() => {
  console.log(`Express web server started: http://localhost:${portNumber}`);
  console.log(`Serving content from /${sourceDir}/`);
});

这是我的 dockerfile

FROM node:14
workdir /usr/src/app
copY package*.json ./
RUN npm install
copY . .
CMD [ "node","express.js" ]

感谢帮助。

解决方法

这是一个非常常见的错误。当您在 docker 容器中广播时,您通常必须在主机 0.0.0.0 上收听,而不仅仅是 localhost。如果您监听 localhost,docker 将无法将流量从容器外部路由到容器内的环回接口。

您可以通过更新您的 express 代码来解决此问题,以便在 0.0.0.0 上进行侦听。我相信就是这样:

app.listen(portNumber,"0.0.0.0",() => {
  console.log(`Express web server started: http://0.0.0.0:${portNumber}`);
  console.log(`Serving content from /${sourceDir}/`);
});

然后,您需要使用以下内容运行 dockerfile:

docker build -t node-app .
docker run -p 3000:3000 node-app