我正在尝试什么?
我正在尝试在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
,它甚至还能在端口上监听吗?
我认为码头工人将port
作为environment variable
传递,并将其设置为80,因为我自己没有传递任何环境变量。
请帮助我对docker
陌生。
答案 0 :(得分:2)
仅仅在您的Dockerfile
中曝光不会为您做到这一点。在执行docker run
或使用docker-example.yaml
执行时,您将需要对其进行映射。
要实现此目的,您将需要使用$ docker run -p 3000:3000
。之后,您将不需要使用--net=host
,这应该是该服务在端口80上可用的原因。
希望有帮助!
干杯!