5

我有一种情况,docker 容器必须与非 dockerized 应用程序和其他主机中的 docker 容器通信。

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

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

如何做到这一点?

PS:我是 Docker 新手

4

1 回答 1

5

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

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

假设上述情况,这2个容器应该能够到达mysql db。

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

回答更新的问题:

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

于 2017-07-17T11:31:18.917 回答