2015-05-29 77 views

回答

5

要链接您的Docker容器,请使用Mesos-DNS。我在下面使用Playa Mesos来解释设置。

设置在Playa Mesos-DNS很简单:使用mesosphere/mesos-dns图像,并使用下列程序规范上马拉松部署:

​​

用下面config.js

{ 
"zk": "zk://127.0.0.1:2181/mesos", 
"refreshSeconds": 60, 
"ttl": 60, 
"domain": "mesos", 
"port": 53, 
"resolvers": ["10.0.2.3"], 
"timeout": 5, 
"email": "root.mesos-dns.mesos" 
} 

而且,请确保resolv.conf在第一位置有正确的条目:

$ cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) 
#  DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN 
nameserver 127.0.0.1 
nameserver 10.0.2.3 
search net 

然后,您可以动态地discover服务(在漂浮的盒子),像这样:

dig _$APPID._tcp.marathon.mesos SRV 

哪里$APPID是您用于部署自定义码头工人形象标识。上面的命令会告诉你马拉松已经分配给你的应用程序的IP和端口。您也可以使用Mesos-DNS HTTP API进行服务发现。

注意1:DCOS附带Mesos-DNS预安装,因此您可以直接使用它进行服务发现。

注2:如果你碰到你的应用程序不理解SRV记录,你可以尝试这种解决方法的问题:https://github.com/the-tetanus-clinic/srv-shim

+0

谢谢。探索Mesos-DNS和领事。显然,暴露的端口只能通过SRV查找来访问,但这不能在json脚本中使用。无论如何,现在完成。如果我进一步探索,我会保持更新。 – 208rishabh

+0

很高兴听到@ 208rishabh,请将答案标记为正确。此外,在SRV记录中使用现有应用程序的解决方法是https://github.com/the-tetanus-clinic/srv-shim –

+1

@MichaelHausenblas:我在m-shop教程的上下文中遵循了这些确切的步骤。但是,在运行dig命令时,我从mesos-dns中得不到答案。将nameserver 127.0.0.1添加到/etc/resolv.conf(或10.141.141.10)不会改变任何内容。 – afraisse

0

official Marathon documentation表示在参数对象(文档页面的底部)中允许使用任意的docker命令,因此您可以使用它来连接它们。

或者Mesos-DNS似乎是一个解决方案。当您从单个主机移动到多个主机并且您的单个容器被安排到不同的主机时,第一个解决方案应该会失败。

注意:我对Docker也不是很有经验,但这些似乎是我能找到的唯一选择。然而,将Docker集成到Mesos中是一个持续的过程,将Docker Swarm集成到Mesos目前正在进行中,所以这些问题很可能会在未来的希望中解决。

相关问题