docker - 在 Mesos/Marathon 上使用端口映射部署 Kibana 4 的 docker 容器

标签 docker mesos mesosphere marathon kibana-4

我正在使用 mesos 和 marathon 部署 Kibana 4 的容器。要部署的 JSON 是:

{
    "id": "/org/products/kibana/webapp",
    "instances": 1,
    "cpus": 1,
    "mem": 768,
    "uris": [],
    "constraints": [
        ["hostname", "UNIQUE"]
    ],
    "upgradeStrategy": {
        "minimumHealthCapacity": 0.5
    },
    "healthChecks": [
        {
            "protocol": "HTTP",
            "path": "/",
            "portIndex": 0,
            "initialDelaySeconds": 600,
            "gracePeriodSeconds": 10,
            "intervalSeconds": 30,
            "timeoutSeconds": 120,
            "maxConsecutiveFailures": 10
        }
    ],
    "env": {
        "ES_HOST":"172.23.10.23",
        "ES_PORT":"9200"
    },
    "container": {
        "type": "DOCKER",
        "docker": {
            "image": "myregistry.local.com:5000/org/kibana:4.0.0",
            "network": "BRIDGE",
            "portMappings": [
                {
                    "containerPort": 5601,
                    "hostPort": 0,
                    "servicePort": 50061,
                    "protocol": "tcp"
                }
            ]
        },
        "volumes": [
          {
            "containerPath": "/etc/localtime",
            "hostPath": "/etc/localtime",
            "mode": "RO"
          }
        ]
    }
}

但是当我发布它时,kibana 应用程序永远不会醒来,并且 stderr 日志是:
I0227 12:22:44.666357  1149 exec.cpp:132] Version: 0.21.1
I0227 12:22:44.669059  1178 exec.cpp:206] Executor registered on slave 20150225-040104-1124079532-5050-952-S0

/kibana/src/index.js:58
      throw error;
            ^
Error: listen EADDRNOTAVAIL
  at errnoException (net.js:905:11)
  at Server._listen2 (net.js:1024:19)
  at listen (net.js:1065:10)
  at net.js:1147:9
  at asyncCallback (dns.js:68:16)
  at Object.onanswer [as oncomplete] (dns.js:121:9)

之后我尝试消除端口映射,因为我发现一些引用表明这是端口或网络配置问题。然后我的 Kibana 4 Web 应用程序可以正常唤醒,但我需要配置端口映射以通过 HTTP 访问。我不知道为什么马拉松有问题 网络端口映射 配置。一些帮助将不胜感激。

最佳答案

这是一个令人讨厌的问题,我也遇到过(在 Mesos + Marathon 上运行 Kibana 4)。

简短的回答:

如果您使用 Kibana 存储库的当前 master,则不会发生这种情况 - 相关代码已在 4.1.0 快照中更改,该快照在撰写本文时是 master。

长答案:

4.0.0 在 src/server/index.js 中有这段代码:

var port = parseInt(process.env.PORT, 10) || config.port || 3000;
var host = process.env.HOST || config.host || '127.0.0.1';

马拉松用品HOSTPOST默认为环境变量,HOST变量设置为 Mesos 从站的主机名。上面的代码使 Kibana 尝试绑定(bind)到 Mesos 从站的 IP 地址(Marathon 已将其放置在 HOST 中),这将失败,因为它在 Docker 容器中运行。

如果要运行 4.0.0,只需将这些行修补为:
var port = config.port || 3000;
var host = config.host || '127.0.0.1';

目前,代码在 master 中看起来像这样。

关于docker - 在 Mesos/Marathon 上使用端口映射部署 Kibana 4 的 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28771033/

相关文章:

docker - 通过 docker-compose 为 docker 容器提供静态 IP

java - JAVA_HOME 错误或缺少对您的架构的支持?

macos - Docker for mac 1.12.0 : how to connect to host from container

postgresql - 在管理员中以(可排序)表格查看Postgresql JSON表格

apache-spark - 如何将 spark-shell 连接到 Mesos?

docker - Marathon表示Docker处于等待状态,Docker引擎表示容器正在运行

docker - 无法在Mesos本地集群安装的系统中通过SSH为主节点

apache-kafka - dcos-kafka-service 和 mesos-kafka 的区别

apache-kafka - 无法在 DC/OS 中启动 Confluent 2.0 (apache-kafka) Schema-Registry

build - Docker自动化构建导致意外失败