【问题标题】:Sharing container ip and port across the hosts跨主机共享容器 ip 和端口
【发布时间】:2016-03-14 23:15:51
【问题描述】:

我们有一组分布在多个主机上的 docker 容器。一些容器属于同一逻辑组,即 network,因此容器应该能够直接对话,访问彼此的 IP 和端口(由 docker 随机分配)。

情况类似于你在 Docker 1.10 中使用 networks 并在一台主机上使用 docker-compose 1.6x,但分布在多台主机上。

我知道带有 etcd/zookeeper 的 swarm 可以管理和连接 docker 集群,但我不知道我在一个容器中的应用程序如何知道另一台主机上其他容器中另一部分的 IP 地址和端口.

【问题讨论】:

  • 容器如何实际发现 IP 和端口?看来您可能需要设置服务发现解决方案。
  • 看起来很像@Auzias...想知道 Docker 在这里如何帮助我。
  • 我不知道,我真的很怀疑。您必须使用发现服务(例如 zookeeper、consul 或 etcd)或自行实现。

标签: networking docker docker-compose docker-swarm


【解决方案1】:

您的应用不需要知道容器的 IP 地址。您可以使用服务名称或其他别名作为主机名。嵌入式 DNS 服务器会将其解析为正确的 IP 地址。

使用此设置,您根本不需要主机端口,因此您已经知道该端口,因为它是一个静态值。

【讨论】:

  • 您说的是 docker 覆盖网络?另外-我需要端口。在一台主机上,我可能有例如2个相同东西的容器,比如2个redis,所以需要不同的端口; Docker 已经提供了。
  • 不,它们不需要不同的端口。端口只需要每个接口而不是每个主机都是唯一的。每个容器都有自己的接口,因此通过覆盖网络,您不必向主机公开任何内容,并且可以使用预定义的端口。
  • 是的,如果您使用多主机,它确实需要使用覆盖网络。在单个主机上,您可以使用桥接网络,并且它的工作方式相同。
【解决方案2】:

本教程介绍了 Docker 的多主机网络:https://docs.docker.com/engine/userguide/networking/get-started-overlay/

【讨论】:

  • 这并不能解决问题的最后一部分“我不知道我在一个容器中的应用程序如何知道另一个容器中另一部分的 IP 地址和端口其他主机。”。
  • 没错。我看不到如何获取 IP 和端口。
  • 该页面清楚地表明有四个条件才能使多主机网络正常工作。所以你必须有一个发现后端,比如 Consul。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2023-03-26
  • 2016-11-26
  • 2019-09-16
相关资源
最近更新 更多