【问题标题】:Docker container on Marathon doesn't finishMarathon 上的 Docker 容器未完成
【发布时间】:2016-02-22 15:58:10
【问题描述】:

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

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

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

然后,我尝试在 Marathon 上运行 docker 容器,遵循 Mesosphere 的 this instruction

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”状态。

在沙盒窗格中,我可以看到标准输出,并且该命令似乎已成功完成。没问题。

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)在完成命令后完成。 有可能吗? 如果可能,怎么做?

谢谢。

【问题讨论】:

    标签: docker mesos mesosphere marathon


    【解决方案1】:

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

    如果您不希望您的应用程序连续运行,您应该看看另一个框架,例如 Chronos。

    【讨论】:

    • 感谢您的回答!然后,我要做的就是在 Chronos 上配置一个框架,让它只运行一次。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多