Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
marathon在销毁作业后不会删除docker容器_Docker_Mesos_Marathon - Fatal编程技术网

marathon在销毁作业后不会删除docker容器

marathon在销毁作业后不会删除docker容器,docker,mesos,marathon,Docker,Mesos,Marathon,当我将docker容器作为马拉松作业运行时,它会在活动的mesos从属系统中创建一个docker容器。当暂停或销毁docker作业时,我认为marathon应该删除docker容器,因为它不再需要。但是容器不会被删除。每次重新启动docker容器作业时,我都必须手动删除它们 有没有办法自动删除这些不需要的容器 编辑: 添加用于启动马拉松作业的json文件 { "id": "pga-docker", "cmd":"sh pga-setup.sh", "cpus": 0.5, "me

当我将docker容器作为马拉松作业运行时,它会在活动的mesos从属系统中创建一个docker容器。当暂停或销毁docker作业时,我认为marathon应该删除docker容器,因为它不再需要。但是容器不会被删除。每次重新启动docker容器作业时,我都必须手动删除它们

有没有办法自动删除这些不需要的容器

编辑: 添加用于启动马拉松作业的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}
      ]
    }
  }
}

Marathon将重新启动失败的docker容器,以便获得所请求的实例数。这可能是因为您看到停止/失效的容器未经Mesos清理。这可能与Mesos将容器清理延迟到GC这一事实有关。
请参见

这是Marathon的行为,因为它是用于长时间运行的服务的,一旦任务完成,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!"
start=$1
完=$2

为了((c=$start;cMesos版本是什么?我检查了当前的mesos代码,容器应该被删除。我观察到被破坏的应用程序也有同样的行为。不确定是马拉松问题还是mesos从属问题。我的mesos 0.22.1,我使用命令行json文件在马拉松中实例化作业。但当我销毁应用程序时,它不会删除contai从主机系统中删除,甚至不停止容器。因此我开始相信,一旦马拉松作业开始,与主机系统中的docker无关。但我错了,因为当我通过“docker stop”强制停止容器时命令,我可以立即看到marathon再次启动一个新容器,这是预期的marathon作业行为。因此,可能是该方法有问题,我将我的json文件feel fre附加到crrct me。