docker与容器的通信

docker与容器的通信,docker,docker-compose,sidecar,Docker,Docker Compose,Sidecar,我试图创建一个示例来创建两个WEB API,并将它们容器化,并在它们之间进行通信。 我想看看侧车设计模式,我在Github中找到了一个我正在尝试运行的示例 在上面的示例中,HelloAPI调用HelloSideCar API,这是一个不同的项目。 在HelloAPI中,调用另一个项目中的另一个API。我正在尝试使用Docker Compose在本地运行 当我尝试点击从HelloAPI(localhost:8080/FromSidecar)项目到SideCarAPI的API时,我看到一个404错

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

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

当我尝试点击从HelloAPI(localhost:8080/FromSidecar)项目到SideCarAPI的API时,我看到一个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"

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

您的容器是具有自己IP的独立网络实体,因此当您调用
http://localhost:8180
从容器内部调用的不是主机,而是发起请求的同一容器。(假设您没有使用主机网络驱动程序)


你在这里试图做的事情类似于Kubernetes中豆荚的行为(这里广泛使用侧车术语)。在Kubernetes中,您可以将这两个容器放在一个pod中,然后它们可以在
localhost上相互调用

据我所知,如果它们位于同一网络上,您可以通过
http://container_name:port
。您可能需要为其创建桥接网络或检查url@NanoBitCompose为您创建一个名为
default
的网络;您通常不需要显式的
网络:
块。Docker文档中进一步描述了这一点。这两个容器的作用是什么?您提出了什么请求,发送到了什么URL,从哪里收到了什么响应?环境变量
SIDECAR\u URL
是否应该有一个额外的
R
。我一直使用桥接网络,所以我从未尝试过默认网络。OP,你有没有尝试过访问,看看你是否可以通过另一个应用程序(如Postman)访问它。