【问题标题】:Marathon won't launch docker containerMarathon 不会启动 docker 容器
【发布时间】:2016-01-27 23:31:46
【问题描述】:

我有一个 1/1 主/从设置,从属具有 8gb ram 8 cpus。我正在尝试使用 marathon 部署一个具有 1gb 内存和 1 个 cpu 的 docker 容器,但它只是等待

我相信这通常是由于马拉松没有获得任务所需的资源 当我查看我的日志时,我看到了

向框架发送 1 个报价 8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(马拉松)在 调度程序-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0.0.1:52016 I0127 23:07:37.396546 2471 master.cpp:3297] 处理 DECLINE 调用 提供:[ 5271fcb3-4d77-4b12-af85-d94fd9172514-O127 ] 用于框架 8bb1a298-cc23-426e-ad43-d440a2a560c4-0000(马拉松)在 调度程序-d4a993b4-69ea-4ac3-9e98-b54afe1e790b@127.0.0.1:52016 I0127 23:07:37.396917 2466 hierarchy.cpp:744] 恢复的 cpus(​):6; 内存(​):5968;磁盘(​):156020;端口(​):[31000-31056、31058-32000] (总计:cpus(​):8;mem(​):6992;磁盘(​):156020; 端口(​):[31000-32000],分配:cpus(​):2;内存(​):1024; 从端口(*):[31057-31057]) 来自框架的 8bb1a298-cc23-426e-ad43-d440a2a560c4-S0 8bb1a298-cc23-426e-ad43-d440a2a560c4-0000

所以看起来马拉松正在拒绝它得到的报价?日志中的下一行说 mesos 正在回收提供的资源,它的回收看起来对我的任务来说足够了吗?

关于如何进一步解决此问题的任何想法?

编辑:所以必须进一步深入研究并找到马拉松日志。

如果我们没有在 marathon docker 部分输入任何端口映射信息,则基本上部署工作。 docker 容器部署成功,我可以从它的主机成功 ping 它,但我无法从其他地方访问它。

如果我们将容器端口设置为 8081(这是 docker 容器公开其应用程序侦听的端口),我们会在部署过程中走得更远,但容器内的应用程序无法构建并出现错误

错误:监听 EADDRINUSE :::8081 在 Object.exports._errnoException (util.js:856:11) 在exports._exceptionWithHostPort (util.js:879:20) 在 Server._listen2 (net.js:1234:14) 在听 (net.js:1270:10) 在 Server.listen (net.js:1366:5) 在 EventEmitter.listen (/usr/src/app/node_modules/express/lib/application.js:617:24) 在对象。 (/usr/src/app/index.js:16:18) 在 Module._compile (module.js:425:26) 在 Object.Module._extensions..js (module.js:432:10) 在 Module.load (module.js:356:32) 在 Function.Module._load (module.js:313:12) 在 Function.Module.runMain (module.js:457:10) 启动时 (node.js:138:18) 在 node.js:974:3

所以我认为我们比以前更进一步,但我们仍然遇到一些端口问题。我不知道为什么容器会在没有端口设置的情况下自行构建成功,而在没有端口设置的情况下使用 marathon 时却不能成功

【问题讨论】:

  • 你能发布马拉松日志吗?
  • 您是否在从属配置中启用了 Docker 容器化程序?
  • 感谢您的回复,今天晚些时候我将成为马拉松日志。是的,我们最初无法启动任何 docker 容器,然后我们启用了正确的 cintaineriser 并启动了 busybot 容器,但不是我们的自定义容器,它需要更多资源,但仍然远远少于应有的资源
  • 不幸的是找不到马拉松日志,试图寻找我应该在文档中查找的位置
  • 看看/var/log/syslog/var/log/messages。更多详情您可以找到here

标签: docker mesos marathon mesosphere


【解决方案1】:

有几件事需要检查:

  1. 在你的奴隶上:ps aux | grep sbin/mesos-slave 应该包含类似:

    --containerizers=docker,mesos --executor_registration_timeout=5mins

  2. 再次在 slave 上检查是否有 Docker 守护进程正在运行:

    ps aux | grep "docker daemon"

  3. 确保您已将 Docker 网络(在 Marathon 中)配置为 BRIDGE。使用HOST 模式,您可能会与主机上已使用的端口发生冲突。这将允许映射slave:32001 -> docker:8080

    ...
    "network": "BRIDGE",
    "portMappings": [
      {
        "containerPort": 8080,
        "hostPort": $PORT0,
        "protocol": "tcp"
      }
    ],
    ...
    
  4. 当任务在 Marathon 中启动时,您会看到类似 myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf 的应用 ID。使用 Mesos CLI (pip install mesos.cli mesos.interface) 获取日志。有一个类似于 Unix 的 tail 的命令用于获取 stdout 日志(-f 关注日志):

    mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf
    

    stderr:

    mesos tail -f -i myapp.a72db5b0-ca16-11e5-ba5f-fea9945fabaf stderr
    

    -i 允许您从非活动任务中获取日志(以防任务快速崩溃)。如果您在 Marathon 中没有抓到 ID,请使用 mesos ps -i

  5. 如果任务没有开始,要么是资源不足,要么是 Marathon 出现问题。将浏览器导航到http://{marathon URI:8080]/logging 并增加任务分配的详细程度。然后查看马拉松日志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 2022-01-14
    • 2016-09-20
    • 2017-03-24
    相关资源
    最近更新 更多