【问题标题】:docker compose communication with containerdocker compose 与容器的通信
【发布时间】:2021-04-28 11:32:36
【问题描述】:

我正在尝试创建一个示例来创建两个 WEB API 并将它们容器化并在它们之间进行通信。 我想看看 side car 设计模式,我在 Github 中找到了一个我正在尝试运行的示例。

https://github.com/cesaroll/dotnet-sidecar

在上面的示例中,HelloAPI 调用了另一个项目的 HelloSideCar API。 在 HelloAPI 中调用另一个项目中的另一个 API。我正在尝试使用 Docker Compose 在本地运行。

当我尝试将 API 从 HelloAPI(localhost:8080/FromSidecar) 项目访问到 SideCarAPI 时,我看到 404 错误,请求不会发送到另一个容器 下面是我的 Docker Compose

# docker-compose up -d
# docker-compose stop
# docker-compose rm -f

version: '3.8'
services:
  hello-sidecar-api:
    image: hello-sidecar-api:latest
    container_name: hello-sidecar-api
    ports:
      - "8180:8080"

  hello-api:
    image: helloapi:latest
    container_name: hello-api
    environment:
      - SIDERCAR_URL=http://localhost:8180/
    depends_on:
      - hello-sidecar-api
    ports:
      - "8080:8080"

【问题讨论】:

  • 据我了解,如果其他容器位于同一网络上并通过http://container_name:port,您可以访问它们。您可能需要为其创建一个桥接网络或检查 url
  • @NanoBit Compose 为您创建一个名为default 的网络;您通常不需要显式的 networks: 块。 Docker 文档中的Networking in Compose 对此进行了进一步描述。
  • 这两个容器有什么作用?您提出什么请求,向哪个 URL 发出请求,从哪里获得响应?环境变量SIDECAR_URL 中是否应该有一个额外的R
  • @DavidMaze,感谢您在那里纠正我。我一直使用桥接网络,所以我从未尝试过默认网络。 OP,您是否尝试过访问 localhost:8180 并查看是否可以通过 Postman 等其他应用访问它。

标签: docker docker-compose sidecar


【解决方案1】:

您可以将 SIDECAR_URL 更改为 http://hello-sidecar-api:8080/ 或将两个 API 放在同一个容器中。请注意,我还将端口从8180 更改为8080,因为8180 是映射在主机上的端口,但在您的Docker 网络中,您的API 可以被8080 上的其他容器访问。

您的容器是具有自己 IP 的独立网络实体,因此当您从容器内部调用 http://localhost:8180 时,您调用的不是主机,而是发出请求的同一个容器。 (假设你没有使用host network driver)。

您在此处尝试执行的操作类似于 Kubernetes 中 pod 的行为(广泛使用 sidecar 术语)。在 Kubernetes 中,您可以将这两个容器放在一个 pod 中,然后它们可以在 localhost 上相互调用

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多