如何在marathon docker参数中使用变量

rkue9o1l  于 2021-06-21  发布在  Mesos
关注(0)|答案(1)|浏览(231)

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

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

gg0vcinb

gg0vcinb1#

我从未试过使用 $HOST 中的变量 parameters 但你可以在 cmd 说明符。你可以这样做:

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

myscript.py中的第一个程序参数是mesos从机的主机名或ip地址。
在myscript.py中,需要执行以下操作:
如果$host varaible包含主机名,请将主机名解析为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))

相关问题