问题描述
我正在尝试将此应用程序转换为 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