最近我在几个节点上设置了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。
我的问题是:
当我在机器上运行ghost-blog-test
图像时(使用标准docker run
命令),它使用/entrypoint.sh npm s
作为其默认命令。使用Mesos + Marathon时我会有同样的行为。
提前致谢!
答案 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无效 应用