我正在使用apachemesos+marathon+zookeeper部署我的rails应用程序。我需要在rails应用程序和其他容器之间共享数据。我在这里找到了一些关于马拉松的参考资料,如下所示:
马拉松/docs/native-docker.html
{
"id": "privileged-job",
"container": {
"docker": {
"image": "mesosphere/inky"
"privileged": true,
"parameters": [
{ "key": "hostname", "value": "a.corp.org" },
{ "key": "volumes-from", "value": "another-container" },
{ "key": "lxc-conf", "value": "..." }
]
},
"type": "DOCKER",
"volumes": []
},
"args": ["hello"],
"cpus": 0.2,
"mem": 32.0,
"instances": 1
}
但是我找不到一种方法来发现我的rails应用程序容器的名称,因为我用格式“mesos uuid”来分配名称。有办法解决吗?或者用另一种方式与马拉松分享容器中的体积?
5条答案
按热度按时间icomxhvb1#
您可以向应用程序添加约束,以将它们强制放到特定的主机上。
在一个简单的情况下,您可以执行以下操作将应用程序强制安装到特定主机上:
下一个选项引入属性。您可以使用一些自定义标记来标记已知数量的主机(比如3个)。
那么你的应用程序定义可以是这样的:
您将此添加到两个应用程序的应用程序定义中,从而在您标记的所有三个从属应用程序上运行每个应用程序的一个示例。
请参阅有关设置属性的参考文档。
qlvxas9a2#
您可以运行类似这样的操作来获取容器id
docker ps --filter label=MESOS_TASK_ID=<mesos-task-id> -q
ac1kyiln3#
我的剧本是根据珊珊的剧本改编的。将hostname作为第一个参数,将marathon部署id列表作为其他参数。
我希望这对某人有帮助;)
我使用的是marathon0.11.1,在这个版本中,mesos容器名称是volumes from参数所需的值。
6mw9ycah4#
答案可能会帮助其他正在寻找答案的人。
使用
docker inspect
并在json中搜索键值为“mesos\u task\u id”的环境设置。现在你有了一个匹配的
CONTAINER_ID
以及MESOS_TASK_ID
一对。希望这有帮助。
更新
为了以自动化的方式确定这一点,首先确保可以远程访问docker守护进程。注意:这可能会引起安全问题
编辑
/etc/default/docker
并添加DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375"
重新启动docker-对你所有的mesos奴隶。使用以下代码,获取
MESOS_SLAVE CONTAINER_ID MESOS_TASK_ID
Map希望这对你有帮助。
6mzjoqzu5#
回到你真正的要求,我不认为它是更好的使用容器\标识与其他容器(s)通信比ipaddress。虽然您使用的是zookeeper,但您可以将其用作名称服务服务器——当“rails应用程序容器”启动时,它可以在特定节点的zk中注册自己,然后其他容器中的其他应用程序可以在那里找到它们想要的东西。