Docker EXPOSE。 无法得到它
在过去的两天里,我遇到了docker的麻烦,而且我可以得到它。 在docker doc之后,您可以暴露容器将侦听与EXPOSE
连接的EXPOSE
。 到现在为止还挺好!
如果我的应用程序监听端口8080,我应该使用EXPOSE 8080
公开EXPOSE 8080
容器,并使用EXPOSE 8080
docker run -p 80:8080
将其绑定到主要主机的端口80。
这是我的Dockerfile:
# DOCKER-VERSION 0.0.1 FROM ubuntu:14.10 # make sure apt is up to date RUN apt-get update # install nodejs and npm RUN apt-get install -y nodejs-legacy npm git git-core ADD package.json /root/ ADD server.js /root/ # start script ADD start.sh /root/ RUN chmod +x /root/start.sh EXPOSE 8080 CMD ./root/start.sh
而我的start.sh
只是runan cd /root/
& npm install
& node server.js
。
我有一个简单的快递nodejs应用程序:
var express = require('express'); // Constants var PORT = 8080; // App var app = express(); app.get('/', function (req, res) { res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
这里是我如何build立我的docker形象: docker build -t app1 .
而我如何启动我的docker: docker run -it -p 80:8080 --name app1 app1
什么是真的有线,这是行不通的。 要使其工作,我必须将EXPOSE 8080
更改为EXPOSE 80
。 我不明白。
任何解释?
谢谢你阅读,汤姆
在你的nodejs应用程序中,你有指令app.listen(PORT);
它告诉nodejs启动一个服务器监听端口PORT
上的环回接口上的连接。 因此,您的应用程序将只能看到源自本地主机(容器本身)的连接。
您需要告诉您的应用程序在端口PORT
上的所有接口上进行监听:
app.listen(PORT, "0.0.0.0");
这样它将会看到来自Docker容器外部的连接。