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

2guxujil  于 2021-06-26  发布在  Mesos
关注(0)|答案(1)|浏览(439)

我正在尝试在我的每个mesos从节点上运行一个consur容器。
对于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从节点上启动一个consur容器。
更新:
感谢@janisz的链接。
在看了以下讨论之后:

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

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

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

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

以及有关任务环境变量的马拉松文档。
我的理解是:
目前无法在args中传递环境变量
一些帖子指出可以将环境变量传入 "cmd" . 但是这些环境变量是marathon提供的任务环境变量,而不是主机上的环境变量。
如果我错了,请改正。

xt0899hw

xt0899hw1#

你可以试试这个。

{
    "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"
    }
}

相关问题