Microservices Marathon:如何在args中指定环境变量

Microservices Marathon:如何在args中指定环境变量,microservices,mesos,marathon,consul,Microservices,Mesos,Marathon,Consul,我正在尝试在我的每个Mesos从属节点上运行一个领事容器 对于Marathon,我有以下JSON脚本: { "id": "consul-agent", "instances": 10, "constraints": [["hostname", "UNIQUE"]], "container": { "type": "DOCKER", "docker": { "image": "consul",

我正在尝试在我的每个Mesos从属节点上运行一个领事容器

对于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从属节点上启动一个领事容器


更新:

谢谢@janisz的链接

在查看以下讨论之后:

  • :marathon文件中的参数不解析环境变量

  • :能够指定运行应用程序任务的主机名的值

  • :在配置中指定要通过REST API在每个主机上使用的环境变量

  • :在应用程序定义中支持更多变量和变量扩展

以及有关的马拉松文档

我的理解是:

  • 目前无法在args中传递环境变量
  • 一些帖子指出可以在
    “cmd”
    中传递环境变量。但是这些环境变量是Marathon提供的任务环境变量,而不是主机上的环境变量
如果我错了,请改正。

你可以试试这个

{
    "id": "consul-agent",
    "instances": 10,
    "constraints": [["hostname", "UNIQUE"]],
    "container": {
        "type": "DOCKER",
        "docker": {
            "image": "consul",
            "privileged": true,
            "network": "HOST",
            "parameters": [
                "key": "env",
                "value": "YOUR_ENV_VAR=VALUE"
            ]
        }
    }
}


我认为这个问题与
{
    "id": "consul-agent",
    "instances": 10,
    "constraints": [["hostname", "UNIQUE"]],
    "container": {
        "type": "DOCKER",
        "docker": {
            "image": "consul",
            "privileged": true,
            "network": "HOST"
        }
    },
    "env": {
        "ENV_NAME" : "VALUE"
    }
}