我正在尝试在每个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"]
}
然而,似乎马拉松将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:马拉松文件中的 args无法解析env变量
#2679:能够指定正在运行的应用任务的主机名值
#1328:通过REST API在每个主机上使用的配置中指定环境变量
#1828:在应用定义中支持更多变量和变量扩展
以及Task Environment Variables上的Marathon文档。
我的理解是:
"cmd"
中传递环境变量。但是这些环境变量是Marathon提供的任务环境变量,而不是主机上的环境变量。如果我错了,请纠正。