【问题标题】:Docker for Mac Container to Host Networking - Consul Health Checks Connection RefusedDocker for Mac 容器到主机网络 - Consul 健康检查连接被拒绝
【发布时间】:2017-12-12 13:56:45
【问题描述】:

我的服务中有一个 HTTP 运行状况检查,在 localhost:35000/health 上公开。目前它总是返回200 OK。健康检查的配置是通过 HTTP API 以编程方式完成的,而不是使用服务配置,但本质上是:

set id: service-id
set name: health check
set notes: consul does a GET to '/health' every 30 seconds
set http: http://127.0.0.1:35000/health
set interval: 30s

当我直接在主机上以开发模式 (consul agent -dev -ui) 运行 consul 时,健康检查通过,没有任何问题。但是,当我在 docker 容器中运行 consul 时,健康检查失败并显示:

2017/07/08 09:33:28 [WARN] agent: http request failed 'http://127.0.0.1:35000/health': Get http://127.0.0.1:35000/health: dial tcp 127.0.0.1:35000: getsockopt: connection refused

据我所知,docker 容器以与主机版本完全相同的状态启动 consul:

version: '2'
services:
  consul-dev:
    image: "consul:latest"
    container_name: "net-sci_discovery-service_consul-dev"
    hostname: "consul-dev"
    ports:
      - "8400:8400"
      - "8500:8500"
      - "8600:8600"
    volumes:
      - ./etc/consul.d:/etc/consul.d
    command: "agent -dev -ui -client=0.0.0.0 -config-dir=/etc/consul.d"

我猜问题是 consul 试图向容器环回接口发出 GET 请求,而不是我想要的,即主机的环回接口。这是一个正确的假设吗?更重要的是,我需要做什么来纠正这个问题?

【问题讨论】:

    标签: docker microservices consul health-monitoring


    【解决方案1】:

    因此,在某些先前版本的 macOS 中发现了一个错误,阻止了 docker0 网络的使用。虽然该错误已在较新版本中得到修复,但 Docker 支持扩展到旧版本,因此 Docker for Mac 目前不支持 docker0。详情请见this discussion。

    解决方法是在主机上为环回接口创建一个别名,将服务设置为侦听该别名或0.0.0.0,并配置 Consul 以向该别名发送健康检查 GET 请求。

    设置别名(选择一个不用于其他用途的私有 IP 地址;我选择了一个 A 类地址,但这无关紧要):

    sudo ifconfig lo0 alias 10.200.10.1/24
    

    删除别名:

    sudo ifconfig lo0 -alias 10.200.10.1
    

    根据上面的服务定义,HTTP 行现在应该是:

    set http: http://10.200.10.1:35000/health
    

    监听健康检查请求的 HTTP 服务器也需要监听 10.200.10.2 或 0.0.0.0。讨论中建议使用后一种选项,但我只尝试使用别名。

    我已经更新了问题的标题以更准确地反映问题,现在我知道了解决方案。希望它也对其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2021-08-15
      • 2018-12-30
      • 2016-10-13
      相关资源
      最近更新 更多