gpt4 book ai didi

docker - 如何使用 marathon Rest API 获知容器名称

转载 作者:行者123 更新时间:2023-12-02 04:40:08 24 4
gpt4 key购买 nike

我正在使用 Apache Mesos + Marathon + Zookeeper 来部署我的 Rails 应用程序。我需要在 Rails 应用程序和其他容器之间共享数据。我在这里找到了一些关于马拉松的引用资料,如下所示:

marathon/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 应用程序容器的名称,因为 marathon 分配的名称格式为:“mesos-uuid”。有什么想法可以解决吗?或者另一种与 marathon 共享容器容量的方法?

最佳答案

答案可能会帮助其他正在寻找答案的人。

使用docker检查并在JSON中搜索键值为“MESOS_TASK_ID”的环境设置。

现在您有了匹配的 CONTAINER_IDMESOS_TASK_ID 对。

希望这有帮助。

更新

要以自动方式确定这一点,首先确保可以远程访问您的 docker 守护进程。 注意:这可能会引起安全问题

编辑/etc/default/docker并添加DOCKER_OPTS="-H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 " 并在所有 mesos 从服务器上重新启动 docker。

使用以下代码获取MESOS_SLAVE CONTAINER_ID MESOS_TASK_ID映射

#!/bin/bash
HOSTS=($(curl -s -X GET -H "Accept: text/plain" http://mesosmaster:8080/v2/tasks | tail -n1 | cut -f3-))
hosts=()
for i in "${HOSTS[@]}"
do
hosts+=($(echo $i | awk -F":" '{print $1}'))
done
host=($(printf "%s\n" "${hosts[@]}" | sort -u))
for host in "${host[@]}"
do
INSTANCES=($(docker -H $host:2375 ps -q))
for container_id in "${INSTANCES[@]}"
do
mesos_id=$(docker -H $host:2375 inspect $container_id | grep MESOS_TASK_ID | awk -F '[="]' '{print $3}')
printf "$host\t$container_id\t$mesos_id\n"
done
done

希望这对您有帮助。

关于docker - 如何使用 marathon Rest API 获知容器名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28681235/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com