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的选项。
我的问题是:
- 如何将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是无效的。