gpt4 book ai didi

node.js - 为什么我的应用程序在端口 80 而不是端口 3000 上监听,因为我将它设置为在 docker 容器中运行?

转载 作者:搜寻专家 更新时间:2023-10-31 23:50:31 25 4
gpt4 key购买 nike

我在尝试什么?

我正在尝试在 docker 容器内运行我的 nodejs 应用程序,并想在容器外使用它(通过我的浏览器在端口 3000 上)。

Docker 文件

FROM node:8
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
RUN npm run build
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]

app.ts(相关部分)

const port = process.env.port || 3000;   
let app = express();
app.listen(port, () => {
console.log(`Listening on port ${port}!`);
});

我用来运行的命令

$ docker run --net=host <imgName>

操作系统 --> Windows 7

在 Oracle Virtual Box 中,我已将网络设置更改为桥接网络。

命令运行成功,服务器开始监听80端口,我可以通过postman、curl、browser等从容器外访问80端口

我哪里做错了?我怎样才能让它在端口 3000 上监听?如果我没有exposed,它怎么能在端口上监听呢?明确吗?

我认为 docker 正在通过 port作为environment variable并将其设置为 80,因为我自己没有传递任何环境变量。

请帮助我是docker 的新手| .

最佳答案

只是在您的 Dockerfile 中公开不会为您做这件事。当您执行 docker run 或使用 docker-example.yaml 执行时,您将需要映射它。

为此,您需要使用 $ docker run -p 3000:3000。之后您将不需要使用 --net=host 这应该是该服务在端口 80 上可用的原因。

希望对您有所帮助!

干杯!

关于node.js - 为什么我的应用程序在端口 80 而不是端口 3000 上监听,因为我将它设置为在 docker 容器中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52015565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com