2

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

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

4

1 回答 1

1

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

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

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

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

  1. 如果 $HOST 变量包含主机名,则将主机名解析为 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))
    
于 2015-06-24T10:27:50.440 回答