无法通过本地 ip:port 访问 nomad docker 任务

问题描述

具有以下作业配置。 curl NOMAD_IP_http:NOMAD_PORT_http 无法访问 http-echo 服务。

本地主机上没有用于传入请求的侦听端口。

为什么以及如何访问 http-echo 服务


job "job" {
  datacenters = ["dc1"]
  group "group" {
    count = 2
    network {        
      port "http" {}
    }
    service {
      name = "http-echo"
      port = "http"
      tags = [
        "http-echo",]
      check {
        type      = "http"
        path      = "/health"
        interval  = "30s"
        timeout   = "2s"
      }
    }
    task "task" {
      driver = "docker"
      config {
        image = "hashicorp/http-echo:latest"
        args = [
          "-listen",":${NOMAD_PORT_http}","-text","Hello and welcome to ${NOMAD_IP_http} running on port ${NOMAD_PORT_http}",]
      }
      resources {}
    }
  }
}

更新

配置驱动network_mode后,curl成功。

network_mode = "host"

解决方法

您忘记在 ports 处添加 job -> group -> task ->ports

现在它适用于最新的游牧民族(v1.1.3+)。

job "job" {
  datacenters = ["dc1"]
  group "group" {
    count = 2
    network {        
      port "http" {}
      # or maps to container's default port
      # port "http" {
      #    to = 5678
      # }
      # 
    }
    service {
      name = "http-echo"
      port = "http"
      tags = [
        "http-echo",]
      check {
        type      = "http"
        path      = "/health"
        interval  = "30s"
        timeout   = "2s"
      }
    }
    task "task" {
      driver = "docker"
      config {
        image = "hashicorp/http-echo:latest"
        args = [
          "-listen",":${NOMAD_PORT_http}","-text","Hello and welcome to ${NOMAD_IP_http} running on port ${NOMAD_PORT_http}",]
        ports = ["http"]
      }
      resources {}
    }
  }
}

然后运行 ​​docker ps,你会得到映射的端口,并且 curl 可以工作了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...