【发布时间】: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