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
您可以:
- 使用
将环境变量设置为80-e“PORT=80”
- 默认情况下,让节点侦听80而不是3000
- 使用
,以便使用正确的来宾端口-p 3000:3000
此外,您在Dockerfile中设置了
EXPOSE 80
,但仍然没有公开正确的端口。根据您的服务器代码,节点仍默认侦听3000
此外,由于您还使用了
-p 123:456
,因此您可能会覆盖公开设置。请参阅:。是否设置了PORT
环境变量?那么,当我运行docker run-it--rm-p 3000:3000
@ueeiie查看我的编辑时,我在Dockerfile端口80中暴露是什么意思。公开端口通常应与默认应用程序端口匹配。