2015-06-22 3 views
2

Я использую Marathon для запуска контейнера Docker и пытаюсь установить DNS-сервер для этого контейнера, чтобы указать на агента Consul на локальном хосте. Внутри контейнера Marathon/Mesos устанавливает переменные среды (которые могут использоваться в «args»), но мне нужен IP-адрес ведомого устройства, чтобы перейти к опции --dns на docker 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 может получить доступ, но это не похоже на работу либо , Какие-либо предложения?

+0

почему бы настройки DNS на 127.0.0.1 или 0.0.0.0 работу для вас? –

ответ

1

Я никогда не пытался использовать переменную $HOST в списке parameters, но вы можете использовать ее в спецификаторе cmd. Вы можете сделать что-то вроде этого:

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

вы получите имя хоста или IP-адрес вашего Mesos раба в качестве первого аргумента программы в myscript.py.

В myscript.py вам нужно сделать folowings:

  1. Resolve имя хоста IP-адрес, если $ HOST содержит имя Название переменной хоста.

    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)) 
    
+0

Спасибо. Знать, что он работает в спецификаторе команд, очень полезно. –