我和mesos+marathon+docker合作了很长一段时间,但我在某个时候遇到了麻烦。目前,我尝试处理持久容器,并尝试使用“volumes from”参数,但我无法使其工作,因为我不知道如何找出数据框的名称,将其作为json中的键。我试着用这里的例子
{
"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条答案
按热度按时间r6hnlfcb1#
可能是这样吧?
o2g1uqev2#
另一种方法是编写一个能够运行所需docker命令的定制mesos框架。为了知道要接受哪些提议以及将每个任务放置在何处,您可以使用来自:/apps/v2/(任务键下)的马拉松信息。
编写新的mesos框架的一个良好起点是:https://github.com/mesosphere/rendler
g6ll5ycj3#
据我所知: Docker
--volume-from
获取容器的id或名称。由于您的datacontainer也是使用marathon启动的,因此它将获得一个id(不包括如何从marathon获取此id)和该表单的名称:
mesos-0fb2e432-7330-4bfe-bbce-4f77cf382bb4
与mesos中的任务id和docker id无关。解决方案是为您的web ubuntu应用程序编写如下内容:
因为这个docker id在marathon中是未知的,所以使用以marathon开头的datacontainer是不实际的。
您可以尝试直接用docker启动数据容器(不使用marathon),并像以前一样使用它,但因为您事先不知道在哪里
web-ubuntu
将被安排(除非你添加一个强制约束)这是不实际的。mklgxw1f4#
mesos支持使用key和value传递volume plugin的参数。但是问题是如何传递卷名,mesos希望卷名是绝对路径,或者如果绝对路径没有传递,那么它将合并随从属容器沙盒文件夹提供的名称。它们这样做主要是为了支持检查点,以防从属服务器意外崩溃。
在上述增强之前,唯一的选择是使用另一个键值对参数。例如在上述情况下
{“key”:“volumes from”,“value”:“databox”},{“key”:“volume”,“value”:“datebox\u volume”}
我已经测试了上面的插件和它的作品。