Mesos Marathon Docker 容器 - CommandInfo

Mesos Marathon Docker Containers - CommandInfo

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

我查看了 Mesos 文档,其中指出:

A docker image currently supports having an entrypoint and/or a default command.

To run a docker image with the default command (ie: docker run image), the CommandInfo’s value must not be set. If the value is set then it will override the default command.

To run a docker image with an entrypoint defined, the CommandInfo’s shell option must be set to false. If shell option is set to true the Docker Containerizer will run the user’s command wrapped with /bin/sh -c which will also become parameters to the image entrypoint.

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

我的问题是:

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

当我在机器上 运行 我的 ghost-blog-test 图像时(使用标准 docker run 命令),它使用 /entrypoint.sh npm s 作为它的默认命令。我希望在使用 Mesos+Marathon 时有相同的行为。

提前致谢!

根据API docs

cmd (String)

The command that is executed. This value is wrapped by Mesos via /bin/sh -c ${app.cmd}. Either cmd or args must be supplied. It is invalid to supply both cmd and args in the same app.

args (Array of Strings)

An array of strings that represents an alternative mode of specifying the command to run. This was motivated by safe usage of containerizer features like a custom Docker ENTRYPOINT. This args field may be used in place of cmd even when using the default command executor. This change mirrors API and semantics changes in the Mesos CommandInfo protobuf message starting with version 0.20.0. Either cmd or args must be supplied. It is invalid to supply both cmd and args in the same app.

由于问题 (#2147),您需要定义一个命令,否则只要不指定命令就可以解决问题,运行 默认的 docker 入口点。
相关错误已在最新 (0.13) 版本中修复,但您需要使用 API,因为 UI (#2749).

中仍然存在问题