应用程序服务器作为一个Docker容器和在另一个容器中运行的数据库运行。获取数据库服务器的IP地址为:
sudo docker inspect -f '{{ .NetworkSettings.IPAddress }}' db
在应用程序服务器中设置JDBC资源以指向数据库,提供" java.net.ConnectException"。
链接容器不是一种选择,因为它只适用于同一主机。
如何确保应用程序服务器容器可以看到数据库容器的IP地址?
答案 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)
缺少一些不允许跨容器通信的事情:
此后,容器能够进行通信。有关完整的详细信息,请访问:
http://blog.arungupta.me/2014/12/wildfly-javaee7-mysql-link-two-docker-container-techtip65/