如何使Docker容器与未经Docker化的应用程序对话?

Kri*_*isT 5 mysql jboss docker docker-engine

我遇到的一种情况是Docker容器必须与未经过docker化的应用程序以及其他主机中的docker容器进行通信。

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

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

如何做到这一点?

PS:我是Docker的新手

Sre*_*eni 5

桥接/自定义桥接网络中的容器可以自动访问外部世界。这是通过 IP 伪装发生的,Docker 会处理它。

  • mysql db 在服务器 B 中
  • 服务器 A 有一条到达运行 mysql db 的服务器 B 的路由。
  • 2 个容器在服务器 A

假设上述情况,2 个容器应该能够访问 mysql db。

还有另一个相关的常见问题,关于容器在 localhost 中访问服务。您可以在此处参考该讨论(从 Docker 容器内部,我如何连接到机器的本地主机?

回答更新的问题:

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