首页 > 解决方案 > 为什么我的应用程序在 docker 容器内运行时侦听端口 80 而不是端口 3000?

问题描述

我在尝试什么?

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

DockerFile

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 端口。我可以通过邮递员、curl、浏览器等从容器外部的 80 端口访问它。

我在哪里做错了?如何让它监听 3000 端口?exposed如果我没有明确地监听端口,它怎么能监听?

我认为 dockerport作为 an传递并将其environment variable设置为 80,因为我自己没有传递任何环境变量。

请帮助我很新docker

标签: node.jsdocker

解决方案


只是暴露在你Dockerfile不会为你做这件事。当您docker run使用docker-example.yaml.

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

希望能帮助到你!

干杯!


推荐阅读