如何在马拉松比赛中使用音量

时间:2015-03-15 19:34:28

标签: docker mesos mesosphere marathon

我和mesos + marathon + docker工作了很长一段时间但我在某个时候陷入困境。目前我尝试处理持久性容器,并尝试使用" volume-from"参数,但我无法使它工作,因为我不知道如何找出数据框的名称,将其作为json中的键。我尝试使用here

中的示例
    {
    "id": "privileged-job",
    "container": {
        "docker": {
            "image": "mesosphere/inky"
            "privileged": true,
            "parameters": [
                { "key": "hostname", "value": "a.corp.org" },
                { "key": "volumes-from", "value": "another-container" },
                { "key": "lxc-conf", "value": "..." }
            ]
        },
        "type": "DOCKER",
        "volumes": []
    },
    "args": ["hello"],
    "cpus": 0.2,
    "mem": 32.0,
    "instances": 1
}

我真的很感激任何帮助: - )

4 个答案:

答案 0 :(得分:1)

据我所知: docker set :linked_dirs, %w{log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system public/ckeditor_assets} 获取容器的ID或名称。

由于您的datacontainer也是使用Marathon启动的,它会获得一个ID(不是如何从马拉松中获取此ID)以及该表单的名称:--volume-from与Mesos中的任务ID无关,也不与docker相关ID。

解决方案是为您的web-ubuntu应用程序编写类似的内容:

mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4

由于Marathon不知道这个docker-ID,因此使用以Marathon启动的datacontainer是不切实际的。

您可以尝试直接使用Docker启动datacontainer(不使用Marathon)并像以前一样使用它,但因为您事先不知道将"parameters": [ { "key": "volumes-from", "value": "mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4" } ] 安排在哪里(除非您添加约束强迫它)这是不切实际的。

答案 1 :(得分:0)



{
    "id": "data-container",
    "container": {
        "docker": {
            "image": "mesosphere/inky"
        },
        "type": "DOCKER",
        "volumes": [
      {
        "containerPath": "/data",
        "hostPath": "/var/data/a",
        "mode": "RW"
      }
    ]
    },
    "args": ["data-only"],
    "cpus": 0.2,
    "mem": 32.0,
    "instances": 1
}
{
    "id": "privileged-job",
    "container": {
        "docker": {
            "image": "mesosphere/inky"
            "privileged": true,
            "parameters": [
                { "key": "hostname", "value": "a.corp.org" },
                { "key": "volumes-from", "value": "data-container" },
                { "key": "lxc-conf", "value": "..." }
            ]
        },
        "type": "DOCKER",
        "volumes": []
    },
    "args": ["hello"],
    "cpus": 0.2,
    "mem": 32.0,
    "instances": 1
}




这样的事可能吗?

答案 2 :(得分:0)

Mesos支持使用" key"传递卷插件的参数。 &安培; "值&#34 ;.但问题是如何传递Mesos期望为绝对路径的卷名,或者如果未传递绝对路径,则它将合并随从容器沙箱文件夹提供的名称。他们这样做主要是为了支持检查点,以防奴隶意外停机。

在上述增强之前,唯一的选择是使用另一个键值对参数。对于例如在上面的案例中

{" key":" volume-from"," value":" databox" },  {" key":" volume"," value":" datebox_volume" }

我已经使用插件进行了上述测试,但它确实有效。

答案 3 :(得分:-1)

另一种方法是编写一个能够运行所需docker命令的自定义mesos框架。为了知道接受哪些要约以及在哪里放置每项任务,您可以使用以下马拉松信息:/ apps / v2 /(在任务键下)。

编写新的mesos框架的一个很好的起点是:https://github.com/mesosphere/RENDLER