【问题标题】:Failing consul health check on local machine本地机器上的领事健康检查失败
【发布时间】:2019-06-01 15:10:09
【问题描述】:

我让 Consul 使用 docker-compose 通过 docker 运行

version: '3'

services:  
  consul:
    image: unifio/consul:latest
    ports:
      - "8500:8500"
      - "8300:8300"
    volumes: 
      - ./config:/config
      - ./.data/consul:/data
    command: agent -server -data-dir=/data -ui -bind 0.0.0.0 -client 0.0.0.0 -bootstrap-expect=1
  mongo:
    image: mongo
    ports:
      - "27017:27017"
      - "27018:27018"
    volumes:
      - ./.data/mongodb:/data/db
    command: mongod --bind_ip_all

并在端口6001 上运行一个nodejs 服务,该服务公开一个/health 端点以进行健康检查。 我可以通过这个consul package 注册服务。 但是,访问 consul UI 我可以看到该服务的状态为failing,因为健康检查不起作用。

UI 显示此消息:

Get http://127.0.0.1:6001/health: dial tcp 127.0.0.1:6001: getsockopt: connection refused

不确定为什么不能完全正常工作,但我感觉我可能错误地配置了领事。 任何帮助都会很棒。

【问题讨论】:

  • 你能解决这个问题吗@MrFoh

标签: docker consul service-discovery


【解决方案1】:

Consul 正在您的 docker 容器中运行。当您在此容器中使用 127.0.0.1 时,它指的是自身,而不是您的主机。

您需要使用容器已知的主机 IP(当然要确保您的服务可访问并侦听此特定 IP)。

在大多数情况下,您应该能够通过默认的 docker0 桥接 IP 从容器联系您的主机,您可以使用 ip addr show dev docker0 从您的主机获得,如in this other answer 所述。

IMO 的最佳解决方案是发现您的容器正在使用的网关,该网关将指向您主机上的特定网桥 IP(即启动时为您的 docker-compose 项目创建的网桥)。有several methods you can use 可以根据安装的工具和你的linux 风格从容器中发现这个ip。

【讨论】:

    【解决方案2】:

    虽然 Zeitounator 的回答非常好并且回答了您的直接问题, 您问题的“间接”解决方案是管理 nodejs 服务 通过 docker-compose。

    恕我直言,使用同一工具管理所有涉及的服务是个好主意, 因为这样他们的生命周期是一致的,而且很容易配置他们说话 彼此(至少docker-compose 是这样)。

    此外,让容器访问主机上的服务在安全性方面存在风险。 在生产环境中,您通常希望从容器中屏蔽主机服务, 否则容器将失去其“收容”作用。

    因此,在您的情况下,您需要将 nodejs 服务添加到 docker-compose.yml

    services:
      (...)
      nodejs-service:
        image: nodejs-service-image
        ports:
        - "6001:6001" [this is only required if you need to expose the port on the host]
        command: nodejs service.js
    

    然后您的领事服务将能够访问nodejs-service 通过http://nodejs-service:6001/health

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2020-09-22
      • 2019-05-05
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2015-01-23
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多