docker - 设置Mesos/Marathon给定的Docker容器名称

标签 docker mesos marathon

我有许多基于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/

相关文章:

python - Docker:命令返回非零代码:137

docker - 参加马拉松比赛时,退出状态为1

DC/OS 上的 Mesos 主配置

mesos - 使用 mesos dcos cli 提交 Spark

docker - marathon 在销毁作业后不会删除 docker 容器

docker - 如何为 Docker postgres 实例指定不同的端口?

docker - 如何从 docker 图像中查看提交消息

docker - 在 Dockerfile 中使用 env 和 arg 会导致缓存层无效

mesos - 使用 MesosExecutor 在 Airflow 上自定义任务资源

docker - 如何从马拉松UI彻底销毁Docker容器?