我有许多基于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下的'parameters')强制设置为所需的名称。微服务可以工作,但是Marathon感到困惑,因为它期望这些“mesos-some_long_hash”名称。它报告它们滞留在部署中。
我需要某种方式通过Marathon API告诉mesos,我不需要名称“mesos-some_long_hash”,而要使用我选择的名称(服务名称)。我没有在Marathon应用程序API中看到任何明显的方法可以执行此操作。
有人知道怎么做吗?
编辑:
我刚刚在mesos中找到了关于容器化器的信息。
http://mesos.apache.org/documentation/latest/docker-containerizer/
听起来好像无法更改容器名称?这很糟糕!如果没有mesos / marathon怪胎就无法命名容器,那么任何人如何做微服务架构?
最佳答案
找出解决方案。
由于我在自己的“用户”网络上运行Docker容器,因此依赖于Docker DNS服务。我可以使用docker run命令中的--network-alias参数在Docker DNS服务中创建别名。我把服务名称放在那里,事情又开始工作了。即使容器带有各种“mesos-uuid”名称。
基本上在app.appContainer.DockerContainer.parameter下添加一个键值对,其中键是“网络别名”,值是服务名称。
看起来我也可以尝试Mesos-DNS。
关于docker - 设置Mesos/Marathon给定的Docker容器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981329/