localhost не отправил никаких данных. ОШИБКА_EMPTY_RESPONSE nodejs

#node.js #docker

#node.js #докер

Вопрос:

Я пытаюсь преобразовать это приложение в 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:

Это очень распространенная ошибка. Когда вы транслируете внутри контейнера docker, вам обычно приходится прослушивать 0.0.0.0 не только хост localhost . Если вы прослушиваете localhost docker, он не сможет перенаправлять трафик из-за пределов контейнера на интерфейс обратной связи внутри контейнера.

Вы можете исправить это , обновив свой экспресс — код для включения прослушивания 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
 

Комментарии:

1. Спасибо, приятель. Я пробовал это, но все та же проблема

2. запуск docker —имя узла-appp -d -p 8080: 8080 узел-приложение

3. попробуйте docker run --name node-appp -d -p 3000:3000 node-app

4.обновил мой ответ, чтобы включить и это. поскольку вы использовали -d , вам также может потребоваться сначала остановить его с помощью docker kill node-app docker rm node-app

5. Я сделал, и теперь я получаю эту ошибку «Не удается ПОЛУЧИТЬ /»

Ответ №2:

Я запускал приложение angular с помощью команды ng serve и столкнулся с той же проблемой.

Потому что сервер живой разработки прослушивает http://localhost:4200 по умолчанию.

затем я использовал команду ng serve --host 0.0.0.0 для запуска проекта angular, и это решило мою проблему.