马拉松将不会启动docker集装箱

我有一个1/1主/从设置与奴隶有8GB的RAM 8 CPU。 我正在尝试使用马拉松来部署一个具有1GB内存和1个CPU的docker集装箱,但它只是等待

我相信这通常是由于看到我看到的日志,马拉松没有得到它想要的资源

发送1个报价到框架8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(marathon)at scheduler-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0.0.1:52016 I0127 23:07:37.396546 2471 master.cpp:3297]在scheduler-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0处处理针对框架8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(马拉松)的优惠的报价:[5271fcb3-4d77-4b12-af85-d94fd9172514-O127]。 0.1:52016 I0127 23:07:37.396917 2466 hierarchical.cpp:744]恢复的cpus() :6; mem( ):5968; disk() :156020; 端口( ):[31000-31056,31058-32000](total:cpus() :8; mem( ):6992; disk() :156020; ports( ):[31000-32000] :来自框架8bb1a298-cc23-426e-ad43-d440a2a560c4的从站8bb1a298-cc23-426e-ad43-d440a2a560c4-S0上的cpus() :2; mem( ):1024;端口(*):[31057-31057] -0000

所以它看起来像马拉松正在下降的报价呢? 在日志中的下一行说,mesos正在回收所提供的资源,它的回收看起来像是我的任务的丰富吗?

有关如何进一步解决这个问题的任何想法?

编辑:所以有进一步深入挖掘,发现马拉松日志。

基本上,如果我们在marathon docker部分没有input任何端口映射的信息,那么部署就可以工作。 docker集装箱部署成功,我可以从它的主机成功ping它,但我不能从其他地方访问它。

如果我们将容器端口设置为8081(这是Docker容器暴露的是它的应用程序侦听的),我们进一步在部署过程中,但容器内的应用程序无法生成错误

错误:在Server._listen2(net.js:1234:14)处的exports._exceptionWithHostPort(util.js:879:20)处侦听EADDRINUSE ::: 8081在Object.exports._errnoException(util.js:856:11)在EventEmitter.listen(/usr/src/app/node_modules/express/lib/application.js:617:24)处的Server.listen(net.js:1366:5)处listen(net.js:1270:10)目的。 (module.js:16:18)在Module._compile(module.js:425:26)在模块的Object.Module._extensions..js(module.js:432:10)在启动时在Function.Module.runMain(module.js:457:10)处的Function.Module._load(module.js:313:12)处加载(module.js:356:32)(node.js:138:18) )在node.js:974:3

所以我认为我们比我们更进一步,但是我们仍然有一些端口问题。 我不知道为什么容器将自己成功build立和马拉松没有端口设置,但与马拉松与端口设置

有几件事情要检查:

  1. 在你的奴隶: ps aux | grep sbin/mesos-slave ps aux | grep sbin/mesos-slave应该包含如下内容:

    --containerizers=docker,mesos --executor_registration_timeout=5mins

  2. 在slave上再次检查是否有Docker Daemon正在运行:

    ps aux | grep "docker daemon"

  3. 确保你已经将Dockernetworking(在Marathon中)configuration为BRIDGE 。 在HOST模式下,您可能会碰到主机上已经使用的端口。 这将允许映射slave:32001 -> docker:8080

     ... "network": "BRIDGE", "portMappings": [ { "containerPort": 8080, "hostPort": $PORT0, "protocol": "tcp" } ], ... 
  4. 当任务在马拉松开始时,您将看到类似myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf的应用程序ID。 使用Mesos CLI( pip install mesos.cli mesos.interface )来获取日志。 有一个命令类似于Unix的tail来获取stdout日志( -f跟随日志):

     mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf 

    stderr

     mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf stderr 

    -i允许您从非活动任务中获取日志(万一任务快速崩溃)。 如果您没有在Marathon中获得ID,请使用mesos ps -i

  5. 如果任务没有开始,那么马拉松资源不足或者有问题。 浏览浏览器到http://{marathon URI:8080]/logging并增加任务分配的详细程度。 然后检查马拉松日志。