与Docker跨容器通信

应用程序服务器作为一个Docker容器运行,并在另一个容器中运行数据库。 数据库服务器的IP地址为:

sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' db 

在应用程序服务器中设置JDBC资源以指向数据库将提供“java.net.ConnectException”。

链接容器不是一个选项,因为它只能在同一个主机上运行。

如何确保数据库容器的IP地址对应用程序服务器容器可见?

如果你想在远程主机上的docker集装箱之间build立私人networking,你可以使用编织在docker集装箱之间build立一个覆盖networking。 如果您不需要专用networking,只需使用-p开关将端口公开,并将主机的地址configuration为所需的泊坞窗容器中的目标IP。

解决这个问题的一个简单方法就是使用Weave 。 它允许您创build许多应用程序特定的networking,这些networking可以跨越多个主机以及数据中心。 它也有一个非常简洁的基于DNS的服务发现机制。

我应该放弃,我是一个编织工程队。

链接容器不是一个选项,因为它只能在同一个主机上运行。

那么你是说你的应用程序是在docker服务器1上运行的容器,而你的数据库是在docker服务器2上的容器? 如果是这样,你就像普通的远程主机一样对待它。 您的数据库端口需要在Docker服务器2上公开,并且该IP:端口需要通过环境variablesconfiguration到您的应用程序服务器中。

每个主机docker子网是一个专用networking 。 这个地址可能是可以路由的,但是这会很痛苦。 由于容器IP不是静态的,因此更加复杂。

你需要做的是将端口/服务发布到主机上(通过dockerfile中的PORT和Docker中的-p)然后你只需要执行host-> host。 您可以通过IP,环境variables或旧的DNSparsing主机。

很less有东西不允许跨容器通信:

  • WildFly没有绑定到0.0.0.0,因此只接受eht0上的请求。 这是使用“-b 0.0.0.0”修复的。
  • 防火墙不允许容器通信。 这被删除使用“systemctl停止防火墙; systemctl禁用防火墙”
  • Virtual Box映像需要一个仅用于主机的适配器

在此之后,容器能够通信。 完整的细节可在

http://blog.arungupta.me/2014/12/wildfly-javaee7-mysql-link-two-docker-container-techtip65/