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