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

我使用ng serve命令运行angular应用程序,遇到了同样的问题。

因为实时开发服务器默认监听http://localhost:4200

然后我使用命令ng serve --host 0.0.0.0来运行angular项目,这就解决了我的问题。

我正在使用这样的命令并得到您的错误

docker run -p 32546:80 myimage

docker run -p 32555:443 myimage

经过几次尝试后,我发现它不能在浏览器上工作,因为端口80 &所以我决定使用另一个端口,如'8080'或'4200'

因此,我将命令修改为

docker run -p 32665:4200

最新更新