【问题标题】:How to keep nomad task from exiting?如何防止游牧任务退出?
【发布时间】:2020-11-29 13:20:42
【问题描述】:

在 docker 中,我们有 -t 标志来防止容器退出。在游牧民族中如何实现同样的目标?

如果我可以从另一个服务 ping 一个服务,我想调试,所以我只想要一个带有 curl 的容器。但是,如果我尝试部署像下面这样指定它的 ubuntu 映像,它将退出并继续重新启动。我该怎么做才能让它继续运行?

task "testubuntu" {

  driver = "docker"

  config {
      image = "ubuntu:latest"
  }

  resources {
      cpu = 500
      memory = 256
      network {
          mbits = 10
      }
  }
}

【问题讨论】:

  • 你应该只在配置节中使用container = true

标签: devops nomad


【解决方案1】:

另一种解决方案是设置一个“虚拟”入口点tail -f /dev/null

task "testubuntu" {

  driver = "docker"

  config {
      image = "ubuntu:latest"
      entrypoint = [
          "tail", "-f", "/dev/null",
      ]
  }

  resources {
      cpu = 500
      memory = 256
  }
}

当您的任务在容器启动时出错但日志中没有太多有用信息时,它特别有用。这个“虚拟”入口点将使容器保持活动状态,允许您进入容器并使用附加的调试器执行真正的启动命令。

除了tail -f /dev/null,您还可以简单地使用yes 作为入口点。但是,如果设置它,它会污染标准输出并影响您的日志记录解决方案。

【讨论】:

    【解决方案2】:

    在配置节中添加container = true

    task "testubuntu" {
    
      driver = "docker"
    
      config {
          image = "ubuntu:latest"
          container = true
      }
    
      resources {
          cpu = 500
          memory = 256
          network {
              mbits = 10
          }
      }
    }
    

    【讨论】:

    • 有趣。您是否有指向此容器配置参数的链接,因为我在 the official docs 中找不到它?)
    • @IlyaKisil 它在那里:container - 默认为 true。此选项可用于禁止 Nomad 在任务退出时移除容器。在名称冲突下,Nomad 仍可能移除死容器。搜索:container -
    • 好的,我现在看到了)但这是作为 gc 节的一部分的游牧客户端/服务器的配置,而不是作业文件。但是,它仍然通过nomad validate ...。不知道可以在作业文件中使用它,或者它可能只是未记录的功能)Nomad 有时会以神秘的方式工作)但是如果作业设置为在失败时立即重新启动,您最终可能会得到很多悬空的容器,不?
    • 再一次,我需要它来测试开发中的 consul connect 连接性。完成后,我使用这个悬挂的容器删除了组和任务。在生产中,找到其他解决方法可能会更好,但它对我有用。
    • 我将不得不尝试更多,但我的第一次尝试没有奏效。但是@Ilya Kisil 的回答确实如此。
    猜你喜欢
    • 2019-05-18
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多