【发布时间】:2016-12-25 11:52:19
【问题描述】:
我正在尝试在我的每个 Mesos 从节点上运行一个 Consul 容器。
对于 Marathon,我有以下 JSON 脚本:
{
"id": "consul-agent",
"instances": 10,
"constraints": [["hostname", "UNIQUE"]],
"container": {
"type": "DOCKER",
"docker": {
"image": "consul",
"privileged": true,
"network": "HOST"
}
},
"args": ["agent","-bind","$MESOS_SLAVE_IP","-retry-join","$MESOS_MASTER_IP"]
}
但是,marathon 似乎将args 视为纯文本。
这就是为什么我总是出错:
==> Starting Consul agent...
==> Error starting agent: Failed to start Consul client: Failed to start lan serf: Failed to create memberlist: Failed to parse advertise address!
所以我只是想知道是否有任何解决方法,以便我可以在我的每个 Mesos 从节点上启动一个 Consul 容器。
更新:
感谢@janisz 提供链接。
看了以下讨论后:
#3416: marathon 文件中的参数无法解析环境变量
#2679:能够指定运行应用任务的主机名值
#1328: 通过 REST API 在配置中指定要在每个主机上使用的环境变量
#1828:在应用定义中支持更多变量和变量扩展
以及Task Environment Variables 上的 Marathon 文档。
我的理解是:
- 目前无法在 args 中传递环境变量
- 一些帖子表明可以在
"cmd"中传递环境变量。但这些环境变量是 Marathon 提供的任务环境变量,而不是您主机上的环境变量。
如果我错了,请纠正。
【问题讨论】:
-
我觉得这个问题和#3416有关
标签: microservices mesos marathon consul