如何在 Marathon Docker 参数中使用变量
How to use variable in Marathon Docker parameters
我正在使用 Marathon 运行 一个 Docker 容器,并且正在尝试将该容器的 DNS 服务器设置为指向本地主机上的 Consul 代理。在容器内部,Marathon/Mesos正在设置环境变量(可以在"args"中使用),但是我需要slave的IP地址传递给[=13]上的--dns
选项=].比如这样不行,因为无法解析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 从设备可以访问的环境变量,但这似乎也不起作用。有什么建议吗?
我从未尝试在 parameters
列表中使用 $HOST
变量,但您可以在 cmd
说明符中使用它。
你可以这样做:
"cmd": "python3 myscript.py $HOST",
您将获得您的 mesos slave 的主机名或 ip 地址作为 myscript.py 中的第一个程序参数。
在 myscript.py 中您需要执行以下操作:
如果 $HOST 变量包含主机名,则将主机名解析为 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))
我正在使用 Marathon 运行 一个 Docker 容器,并且正在尝试将该容器的 DNS 服务器设置为指向本地主机上的 Consul 代理。在容器内部,Marathon/Mesos正在设置环境变量(可以在"args"中使用),但是我需要slave的IP地址传递给[=13]上的--dns
选项=].比如这样不行,因为无法解析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 从设备可以访问的环境变量,但这似乎也不起作用。有什么建议吗?
我从未尝试在 parameters
列表中使用 $HOST
变量,但您可以在 cmd
说明符中使用它。
你可以这样做:
"cmd": "python3 myscript.py $HOST",
您将获得您的 mesos slave 的主机名或 ip 地址作为 myscript.py 中的第一个程序参数。
在 myscript.py 中您需要执行以下操作:
如果 $HOST 变量包含主机名,则将主机名解析为 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))