Docker 容器向 http 发送请求

标签 docker consul

嗨,我有一个问题。

我使用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/

    相关文章:

    docker - 使用docker-compose链接到网络中的容器

    sql-server - 如何使用 docker desktop 将 kubernetes 集群连接到外部 SQL Server 数据库?

    api - Consul 与 API 网关

    Spring Cloud Consul 的发现客户端返回失败的实例

    docker - 在 Bluemix 中创建 Docker 容器时出错

    spring-boot - spring boot gradle任务 "bootBuildImage"构建的cloudfoundry buildpack docker镜像中的语言环境和编码如何设置

    Dockerhub Create Automated Build 步骤卡在“Creating”处

    Consul 健康检查脚本未在 UI 上显示输出

    networking - 无法使用docker consul ping其他主机中的容器