与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/
- 使用API v2将图像上传到Docker Registry时出错
- Docker – 正确的重新部署映像的工作stream程
- Docker似乎忽略了从`eval $(docker-machine env)`设置的DOCKER_HOST和其他variables`
- Docker镜像版本控制和生命周期pipe理
- 在Docker容器里推荐GCE服务帐号authentication?
- AWS Cloud观看不可读的符号
- docker图像通过terminal进行的更改不保存?
- Docker Hub服务器农场位置?
- Docker maven插件ClientProtocolException(使用Docker Toolbox的Windows 10)