Docker 不同容器中的应用程序之间的通信

Docker communication between apps in separate containers

我一直在到处寻找这个答案。对我来说,这似乎是一个显而易见的问题,然而,答案却让我望而却步。

我目前的设置是,我在同一个桥接网络上有 redis、mongodb 和两个 api 服务器。第一个服务器充当网关 api,执行所有身份验证,并公开某些 api 调用。后端 api 是处理所有数据库交互和数据处理的后端。如果我单独点击后端(内部)api,我就能看到内容(这个api不会暴露在实际生产环境中)。但是,如果我从网关 api 中发出相同的请求,我将无法访问后端(内部)api,它也是我创建的桥接网络的一部分。

下面是容器交互图。

我仍然使用传统链接,但我对此有点熟悉。我认为问题在于您正试图从网关容器内部点击 "localhost" 。内部 API 容器无法解析为网关 API 容器内的 "localhost"。由于端口映射,您可以从主机或外部访问 "localhost:8099",但是其他容器的 none 将能够解析 address/port,因为它们 'think'这是一台远程机器。

这里有一种方法可以检验我的想法。在您的主机 shell、运行 中显示了网桥检查命令 here。从 Containers.<inner-api-hash>.IPV4 复制 IP 地址。然后用docker exec -it <gateway-id> /bin/bash在网关容器中打开一个shell然后用curl或者wget看看能不能打到你复制的那个IP地址

如果我的想法是正确的,您将看到您必须使用您的内部 API 节点的 Docker 从其他容器分配的 IP 地址。在其他选项中,您可以使用静态 IP 地址启动容器,如 here.

所示

这开始超出我的知识范围,但您也可以配置容器 DNS。 Configure container DNS.