我有许多基于Docker的微服务,它们都需要相互通信。它们使用容器名称相互通信。因此,当我使用Docker Swarm或Kubernetes (w Flannel)运行此程序时,它们依赖Docker DNS将容器名称解析为IP地址。
现在,我正在尝试使用Mesos+Marathon运行相同的微服务集,但我遇到了一个问题。当我启动所有微服务(使用Marathon )时,mesos为它们命名为“mesos- app.App _long_hash”。当我在启动容器的机器上输入"docker ps“时,我可以看到这个名称。因此,由于这些mesos分配的容器名称,微服务器无法找到彼此。
作为一个实验,我强制容器名称(使用马拉松app.appContainer.DockerContainer应用程序接口下的‘参数’)为我需要的名称。微服务可以工作,但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异常的情况下命名他们的容器,那么他们如何做一个微服务架构?
发布于 2017-10-31 05:08:30
想出了一个解决方案。
因为我在自己的“用户”网络上运行Docker容器,因此依赖于Docker DNS服务。我可以在Docker run命令中使用--network-alias参数在docker DNS服务中创建别名。我把我的服务名称放在里面,然后一切又开始工作了。即使容器有不同的“mesos-uuid”名称。
基本上,在app.appContainer.DockerContainer.parameter下添加一个键值对,其中键是'network-alias‘,值是服务名称。
看起来我也可以尝试Mesos-DNS。
发布于 2017-10-30 03:44:49
您不能在Mesos中命名容器
如果不能在没有mesos/marathon异常的情况下命名自己的容器,那么任何人如何做微服务架构?
当您开始一个微服务架构时,您应该更多地将容器看作是牛而不是宠物。就像你的服务器一样(参见this answer和that blog post)。容器可以在任何时间在任何地方启动和停止(你的Mesos代理之一),你不能给它们命名,因为这样一来,两个容器就不能在一台服务器上启动。
https://stackoverflow.com/questions/46981329
复制相似问题