#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, и это решило мою проблему.