Mesos Marathon Docker容器 – CommandInfo

最近,我在几个节点上安装了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中没有看到closuresCommandInfo shell的选项。

在这里输入图像说明

我的问题是:

  1. 如何将CommandInfo Shell选项(在Marathon或Mesos中)设置为false? 哪里需要设置?

当我在机器上运行我的ghost-blog-test镜像(使用标准/entrypoint.sh npm s docker run命令)时,它使用/entrypoint.sh npm s作为默认命令。 我想在使用Mesos + Marathon的时候也是这样。

提前致谢!

你需要定义一个命令( #2147 ),否则只是没有指定一个命令应该做的伎俩,并运行默认的docker入口点。
相关的bug在最新版本(0.13)中得到修复,但是由于UI中仍然存在问题(#2749 ),您需要使用API​​。

根据API文档

cmd(string)

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

args(string数组)

表示指定要运行的命令的替代模式的string数组。 这是安全使用像定制Docker入口点这样的容器化function的动机。 即使使用默认的命令执行程序,这个args字段也可以用来代替cmd。 此更改反映了从版本0.20.0开始的Mesos CommandInfo protobuf消息中的API和语义更改。 必须提供cmd或参数。 在同一个应用程序中同时提供cmd和args是无效的。