如何在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
列表中使用$HOST
variables,但是可以在cmd
说明符中使用它。 你可以做这样的事情:
"cmd": "python3 myscript.py $HOST",
您将获得您的mesos slave的主机名或ip地址作为myscript.py中的第一个程序参数。
在myscript.py你需要做的folowings:
-
如果$ HOST varaible包含主机名,则将主机名parsing为IP地址。
import socket ip = socket.gethostbyname(sys.argv[1])
-
更改/etc/resolv.conf中的名称服务器,如下所示:
with open('/etc/resolv.conf', 'w') as f: f.write('nameserver {}'.format(ip))