我正在尝试将此应用程序转换为 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)
我正在使用命令运行角度应用程序ng serve并面临同样的问题。
http://localhost:4200因为实时开发服务器默认监听。
比我使用命令ng serve --host 0.0.0.0来运行角度项目,这解决了我的问题。