马拉松在摧毁工作后不会删除docker集装箱

当我运行docker集装箱作为马拉松工作时,它会在活动的mesos从站系统中创builddocker集装箱。 当暂停或销毁docker工作,我期望马拉松应该删除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} ] } } } 

马拉松将重新启动docker集装箱失败,所以你有你请求的实例数量。 这可能是因为你看到Mesos没有清理的停止/失败的容器。 这可能与Mesos延迟容器清理直到GC相关。 请参阅https://issues.apache.org/jira/browse/MESOS-1656

这是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!"