【问题标题】:Docker EXPOSE. Can't get it码头工人曝光。拿不到
【发布时间】: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 installnode 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”不会改变任何东西。

标签: node.js docker


【解决方案1】:

在您的 nodejs 应用程序中,您有指令 app.listen(PORT);,它告诉 nodejs 启动一个服务器,侦听端口 PORT 上环回接口上的连接。 因此,您的应用程序只能看到来自 localhost(容器本身)的连接。

您需要告诉您的应用侦听端口PORT 上的所有接口:

app.listen(PORT, "0.0.0.0");

这样它就会看到来自 Docker 容器外部的连接。

【讨论】:

  • 在运行 nodejs 命令时,我不得不将 --production 参数放在行尾。有了这个参数+你的提示,它现在可以工作了。
  • 非常感谢。经过一番挣扎,我找到了这个答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 2017-02-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多