Dns 如何在Marathon Docker参数中使用变量

Dns 如何在Marathon Docker参数中使用变量,dns,docker,mesos,marathon,consul,Dns,Docker,Mesos,Marathon,Consul,我正在使用Marathon运行Docker容器,并尝试将该容器的DNS服务器设置为指向本地主机上的领事代理。在容器内部,Marathon/Mesos正在设置环境变量(可在“args”中使用),但我需要从机的IP地址传递到docker run上的--dns选项。例如,这不起作用,因为无法解析主机变量: { "id": "demo", "cmd": "python3 -m http.server 8080", "cpus": 0.5, "mem": 64.0,

我正在使用Marathon运行Docker容器,并尝试将该容器的DNS服务器设置为指向本地主机上的领事代理。在容器内部,Marathon/Mesos正在设置环境变量(可在“args”中使用),但我需要从机的IP地址传递到
docker run上的
--dns
选项。例如,这不起作用,因为无法解析主机变量:

{
    "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从机可以访问的环境变量,但这似乎也不起作用。有什么建议吗?

我从未尝试在
参数列表中使用
$HOST
变量,但您可以在
cmd
说明符中使用它。 您可以这样做:

 "cmd": "python3 myscript.py $HOST",
with open('/etc/resolv.conf', 'w') as f:
    f.write('nameserver {}'.format(ip))
您将在myscript.py中获得mesos从机的主机名或ip地址作为第一个程序参数

在myscript.py中,您需要执行以下操作:

  • 如果$host变量包含主机名,请将主机名解析为ip地址

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

     "cmd": "python3 myscript.py $HOST",
    
    with open('/etc/resolv.conf', 'w') as f:
        f.write('nameserver {}'.format(ip))
    

  • 谢谢知道它在命令说明符中工作非常有帮助。为什么将DNS设置为127.0.0.1或0.0.0.0不适合您?