如何在Marathon Docker参数中使用variables

我正在使用Marathon来运行Docker容器,并试图将该容器的DNS服务器设置为指向本地主机上的Consul代理。 在容器内部,Marathon / Mesos正在设置环境variables(可以在“args”中使用),但是我需要从站的IP地址传递给--dns上的--dns选项。 例如,这不起作用,因为HOSTvariables不能被parsing:

 { "id": "demo", "cmd": "python3 -m http.server 8080", "cpus": 0.5, "mem": 64.0, "instances": 2, "container": { "type": "DOCKER", "docker": { "image": "python:3", "network": "BRIDGE", "parameters": [{ "key": "dns", "value": "$HOST" }], "portMappings": [{ "containerPort": 8080, "hostPort": 0, "protocol": "tcp" }] } }, } 

我试过使用一个Mesos奴隶可以访问的环境variables,但似乎也没有工作。 有什么build议么?

我从来没有尝试在parameters列表中使用$HOSTvariables,但是可以在cmd说明符中使用它。 你可以做这样的事情:

  "cmd": "python3 myscript.py $HOST", 

您将获得您的mesos slave的主机名或ip地址作为myscript.py中的第一个程序参数。

在myscript.py你需要做的folowings:

  1. 如果$ HOST varaible包含主机名,则将主机名parsing为IP地址。

     import socket ip = socket.gethostbyname(sys.argv[1]) 
  2. 更改/etc/resolv.conf中的名称服务器,如下所示:

     with open('/etc/resolv.conf', 'w') as f: f.write('nameserver {}'.format(ip))