如何使docker容器与非dockerized应用程序通信?

时间:2017-07-17 10:42:22

标签: mysql docker jboss docker-engine

我遇到的情况是,docker容器必须与其他主机中的非dockerized应用程序和docker容器进行通信。

假设有三台服务器A,B和C.服务器A有两个运行JBoss App Server容器的docker容器。服务器B,非docker主机有MySQL DB。服务器C有另一组容器。

我希望JBoss应用程序服务器容器与驻留在另一台主机中的MySQL DB连接,并从数据库中提取信息。 JBoss还必须讨论驻留在服务器C中的容器。

如何实现这一目标?

PS:我是Docker的新手

1 个答案:

答案 0 :(得分:4)

网桥/用户定义的网桥中的容器可以自动访问外部世界。这通过IP伪装发生,Docker负责处理。

  • mysql db在服务器B中
  • 服务器A有一条到达运行mysql db的服务器B的路由。
  • 2个容器在服务器A中
假设如上所述,2个容器应该能够到达mysql db。

还有一个关于容器在localhost中访问服务的常见问题。您可以在此处引用该讨论(From inside of a Docker container, how do I connect to the localhost of the machine?

回答更新的问题:

当您在群集模式中将容器放入覆盖网络时,它还会创建桥接网络(docker_gwbridge)。默认情况下会为外部访问创建此桥。你是对的,在这种情况下,容器是覆盖和桥接网络的一部分。使用覆盖网络,服务器A中的容器可以与服务器C中的容器通信。对于服务器A中的容器到达DB(非容器化应用程序),您只需要可以从容器内部直接访问的数据库的IP地址和端口。只要可以从服务器A访问DB IP地址,就可以使用桥接网络从服务器A中运行的容器内部访问它。您不需要任何特殊的DNS标志或其他任何东西。