尝试在Docker上运行简单的快递服务器,但无法访问任何路由

上映

我尝试运行一个带有节点的简单容器,我确实获得了添加的日志,.listen(port, log)但是无法使用浏览器访问它。

我是Docker的新手,所以也许我错过了一些东西。

我首先运行docker build -t my-node-app .来创建我的图像。

然后我跑 docker run -it --rm -name myapp -p 3000:80 my-node-app

然后服务器运行,我看到在回叫中添加的日志 app.listen(port ,cb)

但是当我尝试打开时localhost:3000,什么也没出现。

当我在没有docker的机器上本地运行时,它可以正常工作。

我也尝试使用通过找到的IP地址访问该URL docker inspect myapp,但是它也没有解决。

Dockerfile:

FROM node:4-onbuild
EXPOSE 80

节点index.js:

const express = require('express');

const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    console.log('hello')
    res.send('it works!');
});

app.listen(PORT, () => {
    console.log(`${process.env.NODE_ENV}server is running on port ${PORT} on ${process.platform}`);
});
零298

-p开关的语法为:$HOSTPORT:$CONTAINERPORT

看来,您正在将主机端口3000映射来宾端口80但是,您的节点服务器没有监听80。正在收听3000。

您可以:

  • PORT使用“-e "PORT=80"查看”开关将环境变量设置为80ENV
  • 让节点默认监听80而不是3000
  • 使用,-p 3000:3000以便您使用正确的访客端口

此外,您已经EXPOSE 80在Dockerfile中进行了设置,但是仍然没有公开正确的端口。默认情况下,Node仍根据您的服务器代码侦听3000。

另外,由于您也使用-p 123:456,因此有可能覆盖EXPOSE设置。请参阅:覆盖Dockerfile映像默认值

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章