【发布时间】:2014-10-31 14:51:39
【问题描述】:
在过去的两天里,我遇到了 docker 问题,但我可以得到它。按照 docker 文档,您可以公开容器将在其上侦听与 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。
我有一个简单的 express 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);
这是我构建 docker 映像的方式:docker build -t app1 .
以及我如何启动我的 docker:docker run -it -p 80:8080 --name app1 app1
什么是真正的有线,这是行不通的。为了使它工作,我必须将EXPOSE 8080 更改为EXPOSE 80。没看懂。
有什么解释吗?
感谢阅读, 汤姆
【问题讨论】:
-
这是一个配置问题,我一直使用这种类型的端口映射。 “不工作”是不充分的信息。主机上的端口是否开放?如果你直接映射它会发生什么? -p 8080:8080?等等等等。
-
当我说“不工作”时,这意味着我无法使用 curl 或端口 80 上的任何浏览器连接到我的容器,即使我在主主机上请求我的容器。使用“-p 8080:8080”不会改变任何东西。