localhost 没有发送任何数据。 ERR_EMPTY_RESPONSE nodejs

时间:2021-01-14 14:53:50

标签: node.js docker

我正在尝试将此应用程序转换为 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" ]

感谢帮助。

1 个答案:

答案 0 :(得分:1)

这是一个非常常见的错误。当您在 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
相关问题