Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 试图在Docker上运行simple express服务器,但无法访问任何路由_Javascript_Express_Docker - Fatal编程技术网

Javascript 试图在Docker上运行simple express服务器,但无法访问任何路由

Javascript 试图在Docker上运行simple express服务器,但无法访问任何路由,javascript,express,docker,Javascript,Express,Docker,我试着运行一个带有节点的简单容器, 我确实得到了添加到中的日志。侦听(端口,日志) 但是我不能用浏览器访问它 我是Docker的新手,所以也许我遗漏了什么 我首先运行docker build-t我的节点应用程序。创建我的图像 然后我运行docker run-it--rm-name myapp-p3000:80我的节点app 然后服务器运行, 我可以看到我在app.listen(port,cb) 但是当我试图打开localhost:3000时,什么也没有出现 当我在没有docker的机器上本地运行

我试着运行一个带有节点的简单容器, 我确实得到了添加到
中的日志。侦听(端口,日志)
但是我不能用浏览器访问它

我是Docker的新手,所以也许我遗漏了什么

我首先运行
docker build-t我的节点应用程序。
创建我的图像

然后我运行
docker run-it--rm-name myapp-p3000:80我的节点app

然后服务器运行, 我可以看到我在
app.listen(port,cb)

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

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

我还尝试使用我在docker inspect myapp中找到的IP地址访问url,但也没有成功

Dockerfile:

FROM node:4-onbuild
EXPOSE 80
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}`);
});
节点索引.js:

FROM node:4-onbuild
EXPOSE 80
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}`);
});

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

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

您可以:

  • 使用
    -e“PORT=80”
    将环境变量设置为80
  • 默认情况下,让节点侦听80而不是3000
  • 使用
    -p 3000:3000
    ,以便使用正确的来宾端口

此外,您在Dockerfile中设置了
EXPOSE 80
,但仍然没有公开正确的端口。根据您的服务器代码,节点仍默认侦听3000


此外,由于您还使用了
-p 123:456
,因此您可能会覆盖
公开设置。请参阅:。

是否设置了
PORT
环境变量?那么,当我运行
docker run-it--rm-p 3000:3000
@ueeiie查看我的编辑时,我在Dockerfile端口80中暴露是什么意思。公开端口通常应与默认应用程序端口匹配。