Docker容器向http发送请求

时间:2020-05-25 12:17:37

标签: docker consul

嗨,我有一个问题。

我使用docker compose ver3和consul映像作为容器,在我的主机上,我有一个简单的服务应响应http请求,并将其设置在端口40001上。所以现在我要使docker将请求发送到此服务通过http进行运行状况检查(换句话说,将请求从docker容器发送到主机上运行的服务)。

我的领事的docker compose很简单:

version: '3'

services:

  consul:
  image: consul:latest
  command: consul agent -dev -log-level=warning -ui -client=0.0.0.0
  hostname: consul
  container_name: consul
  ports:
    - 8500:8500
    - 8600:8600/udp
    - 40000-41000:40000-41000

因此,我启动了此容器,主机上的服务已在其中使用http运行状况检查地址注册了主机上的服务,其地址为“ http://localhost:40005//Health”。请求的时间间隔大约为15秒,因此我希望这样的请求到达服务后,服务将以200响应。

我也可以访问UI以便在容器中进行领事。

主机上的Well服务不会注册任何传入请求,但有趣的是,当我运行独立的领事时,它运行良好(也就是说,我正在进行健康检查)。

所以我的问题是,这是否可能是容器无法与主机上的服务进行通信的问题。

1 个答案:

答案 0 :(得分:2)

例如,假设您的主机上的端口5555上运行了一项服务。

以下是您要从Docker容器与主机进行通信的四种解决方案:

  1. 您正在使用Linux :在oreder中,要与您的主机联系,您需要通过默认的桥接网络IP与之联系。通常,它的名称为docker0,它的IP地址类似于172.17.0.1(您必须检查这些值)。
    服务地址将为http://172.17.0.1:5555
  2. 您使用的是Mac OS :自Docker 18.03起,建议使用特殊的DNS名称host.docker.internalhere is the doc)。
    服务地址将为http://host.docker.internal:5555
  3. 您正在使用Windows :解决方案与适用于Mac的Docker(doc)的解决方案相同。
    服务地址将为http://host.docker.internal:5555
  4. 所有操作系统:您有一个指向您的服务的静态公共IP或DNS名称,您可以使用它。
    服务地址将为http://[host_public_ip_or_dns]:5555