2

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

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

下面是容器交互的示意图。

Docker容器交互

4

1 回答 1

0

我仍然使用传统链接,但我对此有点熟悉。我认为问题在于您试图从网关容器内点击“localhost”。内部 API 容器无法解析为网关 API 容器内的“localhost”。由于端口映射,您可以从主机或外部点击“localhost:8099”,但您的其他容器都无法解析该地址/端口,因为它们“认为”它是一台远程机器。

这是一种测试我在想什么的方法。在主机的 shell 中,运行此处显示的桥接检查命令。从 复制 IP 地址Containers<inner-api-hash>. IPV4. 然后在网关容器中打开一个外壳,docker exec -it <gateway-id> /bin/bash然后使用curlorwget看看你是否可以点击你复制的那个 IP 地址。

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

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

于 2016-12-13T21:35:47.040 回答