在过去的两天里,我遇到了码头工人的麻烦,我可以得到它.在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容器外部的连接.
| 归档时间: |
|
| 查看次数: |
5900 次 |
| 最近记录: |