Docker容器向http发送请求

Docker容器向http发送请求,docker,consul,Docker,Consul,嗨,我有个问题 我使用docker compose ver3和Concur image作为容器,在我的主机上我有一个简单的服务,应该响应http请求,它设置在端口40001上。所以现在我想让docker通过http向这个服务发送请求作为健康检查(换句话说,将请求从docker容器发送到主机上运行的服务) 我为领事撰写的docker文章很简单: version: '3' services: consul: image: consul:latest command: consul a

嗨,我有个问题

我使用docker compose ver3和Concur image作为容器,在我的主机上我有一个简单的服务,应该响应http请求,它设置在端口40001上。所以现在我想让docker通过http向这个服务发送请求作为健康检查(换句话说,将请求从docker容器发送到主机上运行的服务)

我为领事撰写的docker文章很简单:

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健康检查地址为“”。请求的间隔约为15秒,所以我希望这样的请求到达服务,服务将以200秒响应

我还可以访问容器中领事的用户界面

主机上的服务并没有注册任何传入的请求,但有趣的是,当我运行独立的consur时,它工作正常(也就是说,我正在接受健康检查)

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

例如,假设您的主机上有一个在端口5555上运行的服务

如果要从docker容器与主机通信,以下是四种解决方案:

  • 您在linux上:为了联系您的主机,您需要通过默认网桥网络IP与它联系。通常,它被称为
    docker0
    ,其IP地址类似于
    172.17.0.1
    (您必须检查这些值)。
    服务地址将为
    http://172.17.0.1:5555
  • 您使用的是Mac OS:自Docker 18.03以来,建议使用特殊的DNS名称
    host.Docker.internal
    ()。
    服务地址将为
    http://host.docker.internal:5555
  • 您在Windows上:解决方案与Docker for mac()相同。
    服务地址将为
    http://host.docker.internal:5555
  • 所有操作系统:您有一个指向您的服务的静态公共IP或DNS名称,您可以直接使用它。
    服务地址将是http://[host\u public\u ip\u或\u dns]:5555
  • 例如,假设您的主机上有一个在端口5555上运行的服务

    如果要从docker容器与主机通信,以下是四种解决方案:

  • 您在linux上:为了联系您的主机,您需要通过默认网桥网络IP与它联系。通常,它被称为
    docker0
    ,其IP地址类似于
    172.17.0.1
    (您必须检查这些值)。
    服务地址将为
    http://172.17.0.1:5555
  • 您使用的是Mac OS:自Docker 18.03以来,建议使用特殊的DNS名称
    host.Docker.internal
    ()。
    服务地址将为
    http://host.docker.internal:5555
  • 您在Windows上:解决方案与Docker for mac()相同。
    服务地址将为
    http://host.docker.internal:5555
  • 所有操作系统:您有一个指向您的服务的静态公共IP或DNS名称,您可以直接使用它。
    服务地址将是http://[host\u public\u ip\u或\u dns]:5555