我试图通过在chronos作业定义中指定参数来测试docker端口Map。参数选项似乎对docker运行没有任何影响。
工作定义如下:
{
"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运行的一部分提出任何建议,我们将不胜感激?
2) 我尝试运行的docker映像中指定了入口点。所以从技术上讲,入口点应该在docker运行容器时运行。按照chronos的设置方式,我被迫在jobjson中提供“command”选项(作业提交期间跳过command选项会抛出错误)。当容器实际调度到目标节点上时,它实际上会尝试运行作业定义json中指定的命令,而不是使用dockerfile中的入口点。有人能提供一种方法来使用chronos运行entrypoint而不是chronos job json定义中的命令吗?注意:将命令设置为空白没有帮助。entrypoint可以在json作业定义中指定为命令,这应该可以解决命令的问题。但不能访问所有容器的入口点。
***编辑1:修改后的问题,内容更加清晰
2条答案
按热度按时间whlutmcx1#
要使用docker容器入口点,必须将“shell”设置为false,并且命令必须为空。如果command不同于blank,chronos将把它作为参数传递给entrypoint。您的json如下所示。
我不知道你是否应该使用“uris”字段,这是不赞成的,如果它是我认为它是,它似乎不再需要启动docker应用程序。
关于docker参数,我认为问题在于您使用的键名。看来你必须省略-符号。按以下方式尝试。
rryofs0p2#
你应该看看关于如何运行docker作业的官方文档。
docker作业采用与计划作业或依赖项作业相同的格式,并在docker容器上运行。要配置它,需要一个额外的容器参数,它包含类型(必需)、映像(必需)、网络模式(可选)、装入的卷(可选)以及mesos是否应该在执行之前总是(强制)拉取(映像)最新映像(可选)。
关于1)
我没办法像你那样设置参数。另外,端口Map的指定方式也不同(使用marathon),但据我所知,这根本不可能。对于批处理作业可能不需要。
如果你想运行长跑服务,使用马拉松。
关于(2)
不确定我是否正确理解您的意思,但通常这将通过在dockerfile中指定入口点来实现
关于(3)
我不知道我是否正确理解你,但我认为你应该能够省略
command
docker作业的属性。