最近,我在几个节点上设置了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 Package 的用户命令,该命令也将成为图像入口点的参数。
这是一个很好的信息(我看到了mesos的预期行为),但是我在marathon中没有看到关闭commandinfo shell的选项。
我的问题是:
如何将commandinfo shell选项(在marathon或mesos中)设置为false?需要在哪里设置?
当我跑步的时候 ghost-blog-test
机器上的图像(使用标准 docker run
命令),它使用 /entrypoint.sh npm s
作为其默认命令。我希望在使用mesos+marathon时有相同的行为。
提前谢谢!
2条答案
按热度按时间v09wglhw1#
由于问题(#2147),您需要定义一个命令,否则不指定一个命令就可以了,并运行默认的docker入口点。
最新版本(0.13)修复了相关的bug,但是您需要使用api,因为ui中仍然存在问题(#2749)。
vmdwslir2#
根据api文件
cmd(字符串)
执行的命令。这个值由mesos通过/bin/sh-c${app.cmd} Package 。必须提供cmd或args。在同一个应用程序中同时提供cmd和args是无效的。
args(字符串数组)
表示指定要运行的命令的替代模式的字符串数组。这是出于安全使用集装箱船的特点,如自定义码头入口点。即使使用默认命令执行器,也可以使用此args字段代替cmd。此更改反映了从版本0.20.0开始的mesos commandinfo protobuf消息中的api和语义更改。必须提供cmd或args。在同一个应用程序中同时提供cmd和args是无效的。