本地主机没有发送任何数据。ERR_EMPTY_RESPONSE 节点

Has*_*san 10 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}/`);
});
Run Code Online (Sandbox Code Playgroud)

这是我的 dockerfile

FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "node", "express.js" ]
Run Code Online (Sandbox Code Playgroud)

感谢帮助。

max*_*axm 16

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

您可以通过更新您的快速代码来侦听来解决此问题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}/`);
});
Run Code Online (Sandbox Code Playgroud)

然后,您需要使用以下命令运行 dockerfile:

docker build -t node-app .
docker run -p 3000:3000 node-app
Run Code Online (Sandbox Code Playgroud)


Ali*_*han 7

我正在使用命令运行角度应用程序ng serve并面临同样的问题。

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

比我使用命令ng serve --host 0.0.0.0来运行角度项目,这解决了我的问题。