与Docker交叉容器通信

时间:2014-12-20 14:31:15

标签: docker

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

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

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

链接容器不是一种选择,因为它只适用于同一主机。

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

5 个答案:

答案 0 :(得分:1)

如果您希望在远程主机上的docker容器之间建立专用网络,则可以使用weave在docker容器之间设置覆盖网络。如果您不需要专用网络,只需使用-p开关公开端口,并将主机地址配置为所需docker容器中的目标IP。

答案 1 :(得分:1)

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

我应该放弃,我是Weave工程团队之一。

答案 2 :(得分:0)

  

链接容器不是一种选择,因为它只适用于同一主机。

所以你是说你的应用程序是在docker server 1上运行的容器而你的db是docker server 2上的容器?如果是这样,您将其视为普通的远程主机。您的数据库端口需要在docker server 2上公开,并且需要将IP:端口配置到应用程序服务器中,通常是通过环境变量。

答案 3 :(得分:0)

每个主机泊坞窗子网是Private Network。或许可以让这个地址可以路由,但这会很痛苦。而且它更复杂,因为容器IP不是静态的。

您需要做的是将端口/服务发布到主机(通过dockerfile中的PORT和docker run中的-p)然后您只需执行host-> host。您可以通过IP,环境变量或旧的DNS来解析主机。

答案 4 :(得分:0)

缺少一些不允许跨容器通信的事情:

  • WildFly未绑定到0.0.0.0,因此只接受eht0上的请求。这是使用" -b 0.0.0.0"。
  • 修复的
  • 防火墙不允许容器进行通信。这是使用" systemctl stop firewall删除的; systemctl禁用防火墙"
  • Virtual Box图像需要仅限主机的适配器

此后,容器能够进行通信。有关完整的详细信息,请访问:

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