设置mesos/marathon给定的docker容器名称

imzjd6km  于 2021-06-26  发布在  Mesos
关注(0)|答案(2)|浏览(449)

我有许多基于docker的微服务,它们都需要相互通信。他们用容器的名字互相交谈。因此,当我使用docker swarm或kubernetes(w flannel)运行此程序时,它们依赖docker dns将容器名称解析为ip地址。
现在,我正试图用mesos+marathon运行这套相同的微服务,但遇到了一个问题。当我启动所有的微服务(使用marathonapp.appapi)时,mesos给它们起了一个名字“mesos-some\u long\u hash”。当我在启动容器的机器上键入“docker ps”时,我可以看到这个名称。因此,由于这些mesos指定的容器名,微服务无法找到彼此。
作为一个实验,我将容器名称(使用marathon app.appcontainer.dockercontainer api下的“参数”)强制为我需要的名称。微服务可以工作,但是marathon会感到困惑,因为它需要这些“mesos-some\u long\u散列”名称。它报告说他们在部署时遇到了困难。
我需要一些方法通过marathonapi告诉mesos,我不想使用“mesos-some\u long\u hash”的名称,而是使用我选择的名称(服务名称)。我在马拉松应用程序api中没有看到任何明显的操作。
有人知道怎么做吗?
编辑:我刚刚在mesos发现了这条关于集装箱船的信息。http://mesos.apache.org/documentation/latest/docker-containerizer/
听起来好像不可能更改容器名称?太可怕了!如果没有mesos/marathon的支持,就无法命名自己的容器,那么谁又该如何实现微服务体系结构呢?

6psbrbz9

6psbrbz91#

你不能用mesos命名容器
如果没有mesos/marathon的支持,就无法命名自己的容器,那么谁又该如何实现微服务体系结构呢?
当你开始一个微服务架构时,你应该把你的容器更多地看作是牛而不是宠物。就像你的服务器一样(看看这个答案和那篇博文)。容器可以在任何地方随时启动和停止(您的mesos代理之一),您不能给它们命名,因为这样两个容器就不能在一台服务器上启动。

dfty9e19

dfty9e192#

找到了解决办法。
因为我在自己的“用户”网络上运行docker容器,因此依赖docker dns服务。我可以使用docker run命令中的--network alias参数在docker dns服务中创建别名。我把我的服务名字放在那里,事情又开始运作了。即使容器中有各种“mesos uuid”名称。
基本上,在app.appcontainer.dockercontainer.parameter下添加一个键-值对,其中键是“网络别名”,值是服务名称。
看来我也可以试试mesos dns。

相关问题