2015-07-30 1 views
8

Когда я запускаю контейнер-докер в качестве задания марафона, он создает контейнер-докер в активной ведомой системе мезос. когда вы приостанавливаете или уничтожаете работу докера, я ожидаю, что марафон должен удалить контейнер докера, поскольку его больше не требуется. Но контейнер не удаляется. Я должен удалить их вручную каждый раз, когда марафон перезапускает работу контейнера-докера.Марафон не удаляет контейнер-докер после уничтожения задания

Есть ли способ удалить эти нежелательные контейнеры автоматически?

Edit: Добавление файла JSon для начала марафона работы

{ 
    "id": "pga-docker", 
    "cmd":"sh pga-setup.sh", 
    "cpus": 0.5, 
    "mem": 1024.0, 
    "container": { 
    "type": "DOCKER", 
    "docker": { 
     "image": "pga:test", 
     "parameters": [ 
     { "key": "env", "value": "SERVER_HOST=value" }, 
     { "key": "env", "value": "SERVER_PORT=value" } 
     ], 
     "network": "BRIDGE", 
     "portMappings": [ 
     { "containerPort": 80, "hostPort": 0} 
     ] 
    } 
    } 
} 
+0

какая версия мезоса вы используете? – haosdent

+0

Я проверяю текущий мезосотовый код, контейнер должен быть удален. – haosdent

+0

Я наблюдаю то же поведение для уничтоженных приложений. Не уверен, что это проблема марафона или проблема мезо-раба. – Dharmit

ответ

1

Marathon перезапустит Docker контейнер, который не удался, так что у вас есть количество экземпляров по вашему запросу. Возможно, вы видите остановленные/несостоявшиеся контейнеры, которые не были очищены Mesos. Это может быть связано с тем, что Mesos задерживает очистку контейнеров до GC. https://issues.apache.org/jira/browse/MESOS-1656

0

Это поведение марафона, поскольку оно предназначено для служб с длительным сроком службы, как только задача будет завершена, Marathon предполагает, что он был завершен на этом хосте и сразу же назначит новый экземпляр для запуска заявление. Если вам нужна одна из задач, вы можете использовать Chronos, поэтому задача запускается только один раз. Я написал сценарий, чтобы сделать это автоматически для марафона.

start=$1 
end=$2 
for ((c=$start; c<=$end; c++)) 
do 

     echo "deleting:$c" 
     sleep 10 
     var=$(curl -X GET http://localhost:8080/v2/apps/docker-app-$c | grep "startedAt") 
     echo "$var" 
     if [[ $var == *"startedAt"* ]] 
     then 
      curl -X DELETE http://localhost:8080/v2/apps/docker-app-$c 
      echo "going to delete" 
     else 
       echo "application not started yet" 
     fi 

sleep 1 
done 
echo "Completed!"