Chronos docker参数被忽略

时间:2016-04-15 08:06:50

标签: mesos mesosphere marathon

我试图通过在chronos作业定义中指定参数来测试docker端口映射。参数选项似乎对docker run没有任何影响。

工作定义如下:

{
  "schedule": "R0//P",
  "name": "testjob",
  "container": {
    "type": "DOCKER",
    "image": "path_to_image",
    "network": "BRIDGE",
     "parameters" : [
        {"key" : "-p", "value": "8888:4400"}
   ]
},
  "cpus": "4",
  "mem": "512",
  "uris": ["path to dockercfg.tar.gz"],
  "command" : "./command-to-execute"
}

1)节点上运行的Docker不考虑参数。关于将参数作为docker run的一部分包含的正确方法的任何建议都将受到高度赞赏?

2)我试图运行的Docker镜像中指定了ENTRYPOINT。从技术上讲,当docker运行容器时,ENTRYPOINT应该运行。通过Chronos的设置方式,我被迫在作业JSON中提供“命令”选项(在作业提交期间跳过命令选项会抛出错误)。当容器实际在目标节点上进行调度时,它实际上尝试运行作业定义JSON中指定的命令,而不是使用dockerfile中的ENTRYPOINT。 有人可以提供一种方法来使用Chronos来运行ENTRYPOINT而不是Chronos作业JSON定义中的命令吗? 笔记: 将命令设置为空白没有帮助。 可以将ENTRYPOINT指定为JSON作业定义中的命令,该命令应该通过命令解决问题。但是无法访问所有容器的ENTRYPOINT。

***编辑1:修改后的问题,带有更多背景和清晰度

2 个答案:

答案 0 :(得分:0)

您应该查看有关如何运行Docker作业的official docs

  

docker作业采用与预定作业或依赖项作业相同的格式,并在Docker容器上运行。要配置它,需要一个额外的容器参数,其中包含类型(必需),图像(必需),网络模式(可选),装载(可选)以及Mesos在执行之前是否应始终(强制)拉(图像)最新图像(可选)。

关于1)
恕我直言,没有办法像您一样设置参数。此外,端口映射的指定方式不同(使用Marathon),但据我了解文档,它根本不可能。并且可能不需要批处理作业。

如果您想运行longrunning服务,请使用Marathon。

关于2)
不确定我是否理解正确,但通常可以通过在Dockerfile中指定ENTRYPOINT来实现

关于3)
不确定我是否理解正确,但我认为您应该能够使用Docker作业省略command属性。

答案 1 :(得分:0)

要使用docker容器入口点,必须将“shell”设置为false,并且命令必须为空。如果命令不同于空白,则chronos会将其作为参数传递给入口点。你的json就像下面一样。

我不知道你是否应该使用“uris”字段,它已被弃用,如果它是我认为的那样,似乎不再需要启动docker应用程序了。

关于docker参数,我认为问题在于您使用的密钥名称。看来你必须省略 - 符号。请尝试以下。

{

 "schedule": "R0//P",
  "name": "testjob",
  "shell": false,
  "container": {
    "type": "DOCKER",
    "image": "path_to_image",
    "network": "BRIDGE",
     "parameters" : [
        {"key" : "p", "value": "8888:4400"}
   ]
  },
  "cpus": "4",
  "mem": "512",
  "command" : ""
}