Mesos Marathon Docker容器 - CommandInfo

时间:2015-11-29 18:20:06

标签: shell docker mesos marathon

最近我在几个节点上设置了Marathon,Mesos和Docker。一切都运行良好,除了我在启动Docker容器时遇到问题。具体来说,当Marathon执行启动Docker容器的任务时,marathon会将/bin/sh -c ' '附加为默认的Docker命令。这会导致我的容器启动然后立即退出(我可以看到它们是使用docker ps -a启动的)

我看了一下Mesos文档,其中说明了:

  

目前,docker镜像支持输入点和/或默认命令。

     

要使用默认命令(即:docker run image)运行docker镜像,不得设置CommandInfo的值。如果设置了该值,则它将覆盖默认命令。

     

要运行定义了入口点的docker镜像,必须将CommandInfo的shell选项设置为false。如果shell选项设置为true,则Docker Containerizer将运行用/ bin / sh -c包装的用户命令,该命令也将成为图像入口点的参数。

这是一个很好的信息(我看到了Mesos的预期行为),但我没有在Marathon中看到一个选项来关闭CommandInfo shell。

enter image description here

我的问题是:

  1. 如何将CommandInfo Shell选项(在Marathon或Mesos中)设置为false?那需要设置在哪里?
  2. 当我在机器上运行ghost-blog-test图像时(使用标准docker run命令),它使用/entrypoint.sh npm s作为其默认命令。使用Mesos + Marathon时我会有同样的行为。

    提前致谢!

2 个答案:

答案 0 :(得分:1)

由于问题(#2147),您需要定义命令,否则只是不指定命令应该执行操作并运行默认的docker入口点。
相关错误已在最新版本(0.13)中修复,但您需要使用API​​,因为UI (#2749中仍存在问题。)

答案 1 :(得分:0)

根据API docs

  

cmd(字符串)

     

执行的命令。该值由Mesos via包装   / bin / sh -c $ {app.cmd}。必须提供cmd或args。它是   无法在同一个应用中同时提供cmd和args。

     

args(字符串数组)

     

表示替代指定模式的字符串数组   要运行的命令。这是出于安全使用集装箱的动机   像自定义Docker ENTRYPOINT这样的功能。可以使用该args字段   即使使用默认命令执行程序,也可以代替cmd。这个   在Mesos CommandInfo中更改镜像API和语义更改   protobuf消息从版本0.20.0开始。 cmd或args必须   提供。同时提供cmd和args无效   应用