如何让 docker 容器与非 docker 化的应用程序对话?

How to make docker containers talk to a non-dockerized application?

我的情况是 docker 容器必须与非 docker 化的应用程序和其他主机中的 docker 容器通信。

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

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

如何做到这一点?

PS: 我是 Docker

的新手

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

  • mysql 数据库在服务器 B
  • 服务器 A 有到达服务器 B 的路由,其中​​ mysql db 是 运行。
  • 2 个容器在服务器 A 中

假设以上,2 个容器应该能够达到 mysql db。

关于本地主机访问服务的容器,还有另一个相关的常见问题。您可以在此处参考该讨论(From inside of a Docker container, how do I connect to the localhost of the machine?)

更新问题的答案:

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