EXPOSE
的连接的端口。到目前为止,太棒了!
如果我的应用程序侦听端口8080,我应该使用EXPOSE 8080
公开我的docker容器,并使用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
只是傻瓜cd /root/
& npm install
& node server.js
。
我有一个简单的表达nodejs app:
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);
以下是我构建docker镜像的方法:docker build -t app1 .
以及我如何启动我的码头:docker run -it -p 80:8080 --name app1 app1
真正有线,这是行不通的。为了使其有效,我必须将EXPOSE 8080
更改为EXPOSE 80
。我不明白。
有任何解释吗?
感谢阅读, 汤姆
答案 0 :(得分:30)
在您的nodejs应用程序中,您有指令app.listen(PORT);
,它告诉nodejs启动服务器,侦听端口PORT
上的环回接口上的连接。
因此,您的应用只能看到源自localhost的连接(容器本身)。
您需要告诉您的应用监听端口PORT
上的所有接口:
app.listen(PORT, "0.0.0.0");
这样,它将看到源自Docker容器外部的连接。