【问题标题】:Mesos Marathon Docker Containers - CommandInfoMesos Marathon Docker 容器 - CommandInfo
【发布时间】:2015-12-02 04:56:23
【问题描述】:

最近我在几个节点上设置了 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 的选项。

我的问题是:

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

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

提前致谢!

【问题讨论】:

    标签: shell docker mesos marathon


    【解决方案1】:

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

    【讨论】:

    • 嗨,奥兰多,感谢您的洞察力。是的,不指定命令会给我bash -c '' 问题。但是,我可以从 API 运行它,它可以毫无问题地工作。用户界面中似乎存在错误。
    • 很高兴听到这个消息!我们正在对 UI 进行修复 (#460),因此您应该能够很快使用 UI 创建此类应用。
    【解决方案2】:

    根据API docs

    cmd(字符串)

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

    args(字符串数组)

    代表另一种指定模式的字符串数组 要运行的命令。这是出于安全使用容器化程序的动机 像自定义 Docker ENTRYPOINT 这样的功能。可以使用此 args 字段 即使使用默认的命令执行器,也可以代替 cmd。这个 在 Mesos CommandInfo 中更改镜像 API 和语义更改 从 0.20.0 版开始的 protobuf 消息。 cmd 或 args 必须 被供应。同时提供 cmd 和 args 是无效的 应用程序。

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多