Marathon上的Docker容器还没有完成

时间:2015-04-16 10:34:53

标签: docker mesos mesosphere marathon

我有Mesos集群由3台CentOS6.5机器组成。

ZooKeeper和Mesos-Master正在其中一台机器上运行,Mesos-Slave正在每台机器上运行。

此外,Marathon正在主节点上运行。

然后,我试图在Mesthon上跟随this instruction在Marathon上运行docker容器。

job.json如下所示,

{
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "libmesos/ubuntu"
    }
  },
  "id": "ubuntu",
  "instances": 1,
  "cpus": 0.5,
  "mem": 512,
  "uris": [],
  "cmd": "date -u +%T"
}

然后我运行以下命令,

curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" <master-hostname>:8080/v2/apps -d@job.json

然后在Marathon Web UI上,我可以看到Docker容器即使在很长时间后也处于“部署”状态。

在Mesos-Master Web UI上,我可以看到任务在很长一段时间后处于“STAGING”状态。

在Sandbox窗格中,我可以看到stdout,命令似乎已完成successfly。没问题。

stderr就是这样,

I0416 19:19:49.254998 29178 exec.cpp:132] Version: 0.22.0
I0416 19:19:49.257824 29193 exec.cpp:206] Executor registered on slave 20150416-160950-109643786-5050-30728-S0

stdout是这样的,

Registered executor on master-hostname
10:19:49

但我希望容器(TASK)在完成命令后完成。 有可能吗? 如果可能,该怎么做?

谢谢。

2 个答案:

答案 0 :(得分:5)

任务将完成(您应该能够在Mesos完成的任务中看到)但是Marathon将重新启动容器。 Marathon适用于长期运行的应用程序。

如果您不希望您的应用程序持续运行,您应该看一下像Chronos这样的另一个框架。

答案 1 :(得分:0)

Marathon适用于长时间运行的流程。即使您移除容器,马拉松也会尝试重启这些容器。我观察到的另一件事是Marathon尝试启动容器并继续这样做,直到你没有内存和CPU。当您没有资源时,您的任务将进入阶段状态。