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 installnode 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容器外部的连接。