我有许多基于Docker的微服务,它们都需要相互通信。他们使用容器名称互相交谈。因此,当我使用Docker Swarm或Kubernetes(W Flannel)运行时,他们依靠Docker DNS将容器名称解析为IP地址。
现在,我试图用Mesos + Marathon运行同样的微服务,但我遇到了一个问题。当我启动所有微服务(使用Marathon app.App API)时,mesos为它们命名为" mesos-some_long_hash"。当我输入" docker ps"我可以看到这个名字。在机器上,容器被启动。因此,由于这些mesos分配了容器名称,微服务器无法找到彼此。
作为一项实验,我强制使用容器名称(使用Marathon app.appContainer.DockerContainer API下的'参数)来获取我需要的名称。微服务工作,但马拉松感到困惑,因为它期望这些" mesos-some_long_hash"名。它报告称他们在部署时陷入困境。
我需要一些方法通过Marathon API告诉mesos,我不想要一个名字" mesos-some_long_hash"而是使用我选择的名称(服务名称)。我没有在Marathon应用程序API中看到任何明显的事情。
任何人都知道怎么做?
编辑: 我刚刚发现了关于mesos中的容器化器。 http://mesos.apache.org/documentation/latest/docker-containerizer/
听起来好像无法更改容器名称?这很糟糕!如果没有mesos / marathon freakout他们无法命名他们的容器,那么如何做一个微服务架构呢?
答案 0 :(得分:1)
找出解决方案。
因为我在自己的“USER”网络上运行Docker容器,因此依赖于Docker DNS服务。我可以使用docker run命令中的--network-alias参数在Docker DNS服务中创建别名。我把我的服务名称放在那里,事情又开始了。即使容器中有各种“mesos-uuid”名称。
基本上在app.appContainer.DockerContainer.parameter下添加一个键值对,其中键是'network-alias',值是服务名称。
看起来我也可以尝试使用Mesos-DNS。
答案 1 :(得分:0)
您无法在Mesos中为容器命名
如果没有mesos / marathon freakout他们无法命名他们的容器,那么如何做一个微服务架构呢?
当你开始使用微服务架构时,你应该把你的容器想象成牛,然后就像宠物一样。与您的服务器一样(请参阅this answer和that blog post)。容器可以随时在任何地方(您的一个Mesos代理)启动和停止,您无法为它们命名,因为无法在一台服务器上启动两个容器。