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

我一直在寻找这个答案。 对我来说,这似乎是一个明显的问题,但是,答案已经没有了我。

我目前的设置是,我在同一个网桥上有redis,mongodb和两个api服务器。 第一台服务器作为一个网关api来完成所有的authentication,并暴露某些api调用。 后端API是处理所有的数据库交互和数据消除的一个。 如果我单独打开后端(内部)api,则可以看到内容(在实际的生产环境中不会暴露此api)。 但是,如果我从网关api内发出相同的请求,我不能打到也是我创build的桥接networking的一部分的后端(内部)api。

下面是容器交互的图。

Docker容器交互

我仍然使用遗留链接,但我有点熟悉这一点。 我认为问题是你正试图从你的网关容器中打“localhost”。 内部API容器不能被parsing为网关API容器内的“localhost”。 您可以从主机或外部因为端口映射而打“localhost:8099”,但您的其他容器都不能parsing该地址/端口,因为他们认为它是远程机器。

这是一个testing我在想什么的方法。 在主机的shell中,运行这里显示的bridge inspect命令。 从Containers复制IP地址。 <inner-api-hash>IPV4 。 然后使用docker exec -it <gateway-id> /bin/bash在网关容器中打开一个shell,然后使用curlwget来查看是否可以点击复制的IP地址。

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

这开始逃脱我的知识范围,但是你也可以configuration一个容器DNS。 configuration容器DNS 。