Docker容器中的Consul Connect上游接口

时间:2019-02-01 17:14:45

标签: docker consul nomad

是否可以将领事连接上游绑定到127.0.0.1环回之外的另一个接口?

Consul Connect - Nomad本文说,您可以在官方Docker容器中运行连接代理,但是存在一个问题,即上游依赖项无法公开。运行raw_exec版本时,我看到主机127.0.0.1上有可用的上游。但是,如果我在一个容器中运行相同的配置,其他容器将无法连接到这些端口。

示例配置:

    task "proxy" {
      driver = "docker"

      config {
        image = "consul:1.4.0"
        force_pull = true
        network_mode = "host"

        args = [
          "connect", "proxy",
          "-service", "api",
          "-log-level", "debug",
          "-upstream", "upstream:${NOMAD_PORT_tcp}"
        ]
      }

      env {
        "CONSUL_HTTP_ADDR" = "${NOMAD_IP_tcp}:8500"
      }

      resources {
        network {
          port "tcp" {}
        }
      }
    }

在此配置中,仅当您sh进入容器本身并使用netcat检查时,称为上游的服务才可用。是否有一种方法可以强制Consul Connect将上游服务绑定到0.0.0.0,以便可以将其公开在本地Docker网络上?

1 个答案:

答案 0 :(得分:0)

这里的窍门是对边车容器和要使用边车的任何其他容器都使用network_mode = "host"。主机Docker网络使这成为可能:

"RABBITMQ_HOST" = "localhost"
"RABBITMQ_PORT" = "${NOMAD_PORT_proxy_rabbitmq}"

因为Consul Connect边车将所有上游绑定到localhost,并且Docker host网络公开了容器内的所有端口,就像容器在主机上作为原始进程运行一样。