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

我正在使用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) 

之后,我试图消除一个端口映射,因为我发现一些引用指出这是一个端口或networkingconfiguration问题。 然后,我的Kibana 4networking应用程序醒来很好,但我需要configuration一个端口映射通过HTTP访问。 我不知道为什么马拉松networkingportMappingsconfiguration有问题。 一些帮助将不胜感激。

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

简短的回答:

如果您使用Kibana仓库的当前主数据库,则不会发生这种情况 – 相关代码在编写本文时的主数据4.1.0快照中发生了变化。

漫长的回答:

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'; 

Marathon默认提供HOSTPOST环境variables,而HOSTvariables设置为Mesos从服务器的主机名。 上面的代码使得Kibana尝试绑定到Mesos从服务器(Marathon已经放置在HOST )的IP地址,这将失败,因为它在Docker容器中运行。

如果你想运行4.0.0,你可以将这些行修改为:

 var port = config.port || 3000; var host = config.host || '127.0.0.1'; 

这个代码在这个时候看起来像这个主人。