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.
我一直在到处寻找这个答案。对我来说,这似乎是一个显而易见的问题,然而,答案却让我望而却步。
我目前的设置是,我在同一个桥接网络上有 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.