gpt4 book ai didi

Docker 容器向 http 发送请求

转载 作者:行者123 更新时间:2023-12-02 20:57:52 25 4
gpt4 key购买 nike

嗨,我有一个问题。

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

我的 docker compose for consul 很简单:

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。

主机上的服务不会注册任何传入请求,但有趣的是,当我运行独立 consul 时它工作正常(即我正在接受健康检查)。

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

最佳答案

例如,假设您在主机的端口 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 (here is the doc)。
    服务地址将是 http://host.docker.internal:5555 .
  • 您使用的是 Windows :解决方案与 Docker for mac ( doc ) 的解决方案相同。
    服务地址将是 http://host.docker.internal:5555 .
  • 所有操作系统 :您有一个指向您的服务的静态公共(public) IP 或 DNS 名称,您可以使用它。
    服务地址将是 http://[host_public_ip_or_dns]:5555 .
  • 关于Docker 容器向 http 发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62002249/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com