Docker EXPOSE.无法得到它

Tom*_*y V 13 node.js docker

在过去的两天里,我遇到了码头工人的麻烦,我可以得到它.在docker doc之后,您可以公开容器将侦听连接的端口EXPOSE.到现在为止还挺好!

如果我的应用程序侦听端口8080,我应该暴露我的docker容器EXPOSE 8080并将其绑定到主要主机的端口80 docker run -p 80:8080.

这是我的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
Run Code Online (Sandbox Code Playgroud)

而我start.sh只是汝南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);
Run Code Online (Sandbox Code Playgroud)

以下是我如何构建我的docker镜像:docker build -t app1 . 以及我如何启动我的docker:docker run -it -p 80:8080 --name app1 app1

什么是有线的,这是行不通的.为了使它工作,我必须EXPOSE 8080改为EXPOSE 80.我不明白.

任何解释?

谢谢你的阅读,汤姆

Tho*_*eil 30

在你的nodejs应用程序中,你有app.listen(PORT);一条指令告诉nodejs启动服务器监听端口上的loopback接口上的连接PORT.因此,您的应用只能看到源自localhost的连接(容器本身).

你需要告诉你的应用程序监听端口上的所有接口PORT:

app.listen(PORT, "0.0.0.0");
Run Code Online (Sandbox Code Playgroud)

这样它将看到源自Docker容器外部的连接.