node.js - 为什么我的应用程序在 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
。
解决方案
只是暴露在你Dockerfile
不会为你做这件事。当您docker run
使用docker-example.yaml
.
为此,您需要使用$ docker run -p 3000:3000
. 之后您不需要使用--net=host
它应该是该服务在端口 80 上可用的原因。
希望能帮助到你!
干杯!
推荐阅读
- php - Laravel:$request->hasFile() 不起作用调用字符串上的成员函数 getClientOriginalExtension()
- arrays - 找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Arrays。角
- mysql - MySQL:多表 - 一对多关系,获取子列之一不为空的列
- android - 如何通过 ArcGIS Runtime for Android 使用 GeoWebCache 中发布的地图
- mysql - 在 NATURAL JOIN 上使用 WHERE 子句
- nativescript - 在 nativescript-vue 的 FlexboxLayout 中将标签居中
- excel - 如何在不显示工作簿的情况下触发/初始化 Excel VB 用户表单?
- asp.net - SQL Server 使用 ASP.NET 检索数据
- python - 用 QLCDNumber.display() 和 PyQt 显示数字
- apache-spark - 更新和插入