设置docker容器名称mesos /马拉松

我有一些基于Docker的微服务,都需要相互交stream。 他们使用容器名称相互交谈。 因此,当我使用Docker Swarm或者Kubernetes(w Flannel)来运行时,他们依靠Docker DNS将容器名称parsing为IP地址。

现在,我正在尝试使用Mesos + Marathon来运行这个相同的微服务,但是我遇到了一个问题。 当我启动所有微服务(使用Marathon app.App API)时,mesos会给它们起一个名为“mesos-some_long_hash”的名称。 当我在启动容器的机器上键入“docker ps”时,可以看到这个名字。因此,由于这些mesos分配了容器名称,微服务器无法find彼此。

作为一个实验,我强制容器名称(使用Marathon app.appContainer.DockerContainer API下的“参数”)到我需要的名称。 微服务的工作,但马拉松得到混淆,因为它期望这些“mesos-some_long_hash”的名字。 它报告说他们坚持部署。

我需要一些方法来通过Marathon API来告诉mesos,我不需要“mesos-some_long_hash”的名称,而是使用我select的名称(服务名称)。 在Marathon应用程序API中,我没有看到任何明显的做法。

有人知道怎么做吗?

编辑:我刚刚在mesos发现这个关于容器。 http://mesos.apache.org/documentation/latest/docker-containerizer/

这听起来像是不可能改变容器名称? 这很糟糕! 如果没有mesos / marathon freakout,他们不能命名他们的容器,那么人们如何做一个微服务架构呢?

想出了一个解决scheme。

因为我在我自己的“用户”networking上运行Docker容器,因此依靠Docker DNS服务。 我可以使用docker run命令中的–network-alias参数在Docker DNS服务中创build别名。 我把我的服务名称放在那里,事情又开始了。 即使有各种'mesos-uuid'的名字的容器。

基本上在app.appContainer.DockerContainer.parameter下添加一个键值对,其中键是“network-alias”,值是服务名。

看起来我也可以尝试Mesos-DNS。

你不能在Mesos中命名一个容器


如果没有mesos / marathon freakout,他们不能命名他们的容器,那么人们如何做一个微服务架构呢?

当你启动一个微服务架构时,你应该把你的容器看作是牛,然后是宠物。 就像你的服务器(看到这个答案和博客文章 )。 容器可以随时启动和停止在任何地方(你的Mesos代理之一),你不能给他们的名字,因为两个容器不能在一台服务器上启动。