【问题标题】:Docker swarm, Consul and Spring BootDocker swarm、Consul 和 Spring Boot
【发布时间】:2016-12-24 04:47:41
【问题描述】:

我在 docker 容器中打包了 6 个微服务。在每个 swarm 节点上,我都安装了 consul 代理,绑定到主机 ip,客户端处于 0.0.0.0 模式。 所有微服务都在我从 Swarm 管理器运行的 docker-compose 文件中。 微服务是用 Java 编写的,我必须在 bootstrap.yml 中指定 consul 代理端点。可能的选择是:

  • 本地主机
  • ${HOSTIP} 环境变量

问题: - localhost 不是主机的 localhost,而是容器 localhost,并且我在容器 localhost 但主机上没有领事代理。 - 撰写文件中的 ${HOSTIP} 我必须提供此环境变量。但是,我不知道 Swarm MANager 将在哪里安排微服务启动,所以我不知道将使用哪个 IP 地址。

我尝试在每个节点上公开主机 IP 地址,但由于我从管理器运行 compose,它不会读取此变量。

您有任何解决此问题的建议吗?我有领事集群、3 个管理器和 3 个节点。在每个管理器和节点上,我都启动了领事代理(作为 docker 容器)。无论我使用什么类型的网络,我都无法启动微服务。我以 --net=host 和 --net=bridge 的身份启动了 consul,但这不起作用。

有人有想法吗? 先谢谢了。

【问题讨论】:

标签: docker docker-compose docker-swarm orchestration


【解决方案1】:

所以你也在容器中运行领事,对吧?在您的设置中是否可以链接容器?因此,您可以在每个主机上将 consul 容器作为“consul”启动,并将您的微服务链接到它。链接的容器有一个 hosts 条目,因此您的服务中应该可以通过“consul:8500”访问领事服务。 编辑:如果您使用来自 Hashicorp 的官方 Consul Docker 映像,您可以将客户端地址配置为 0.0.0.0,这应该使 consul API 可用于主机上运行的其他容器。

【讨论】:

  • 我在 docker 容器中运行 consul,所有主机上的官方镜像。客户端地址设置为 0.0.0.0。另外,我正在运行带有标志--net = host 的领事。在撰写文件中,有 5 个容器。链接无济于事,因为领事在主机网络上,但容器是在覆盖网络中启动的。我也尝试过桥接网络,但它不起作用。
  • 是的,不允许同时链接和 --net=host。使用 Hashicorp 的官方图像,您可以使用一些环境变量。这个变体对我有用:docker run -d -e CONSUL_CLIENT_INTERFACE=docker0 -e CONSUL_BIND_INTERFACE=lo --net=host consul agent - 这将客户端接口和 API 绑定到 Docker 桥接口(目前标准为 172.17.0.1),我能够通过 curl 从另一个容器通过此 IP 调用代理跨度>
  • 根本行不通。 Consul 在 localhost 上启动,但由于 java 应用程序在容器中,并且 consul 端点是 localhost,它只是不知道使用来自 VM 的 localhost,而不是来自容器。
  • 当像我的示例一样运行时,另一个容器中的 consul 端点将是 172.17.0.1:8500 而不是 localhost,因为 consul 客户端接口绑定到 docker 桥接口。在我的设置中,它的工作原理与此完全相同。
  • 好的,我已将 172.17.0.1:8500 作为连接字符串放入 bootstrap.yml 并且服务现在正在寻找领事。运行状况检查现在失败。
【解决方案2】:

让我回答我自己的问题:这不是我们想要这样做的方式,我的意思是,我们不能将一些东西放在 Swarm 中,而将一些东西放在 Swarm 之外,并期望它会起作用。它不会。 Consul 作为服务发现也不能在 Swarm 之外使用。简单的答案是使用 Docker 编排和服务发现,而不涉及 Consul。如果有人在使用 Swarm,一切都应该在覆盖网络中(rabbit、redis、elk 等)...

【讨论】:

  • 当您说“这不是我们想要这样做的方式”时,您是在谈论 OP 的要求还是 kgorskowski 在回答中所说的内容?您能否请edit您的回答并澄清一下?谢谢!
猜你喜欢
  • 2019-06-10
  • 2017-09-26
  • 2021-04-16
  • 2017-09-04
  • 2016-11-30
  • 2020-09-06
  • 2018-12-05
  • 2018-06-20
  • 1970-01-01
相关资源
最近更新 更多