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

nhn9ugyo  于 2021-06-21  发布在  Mesos
关注(0)|答案(2)|浏览(517)

当我作为马拉松作业运行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}
      ]
    }
  }
}
xmq68pz9

xmq68pz91#

marathon将重新启动失败的docker容器,以便您拥有所请求的示例数。这可能是你看到停止/失败的集装箱没有清理迈索斯。这可能与mesos将容器清理延迟到gc有关。看到了吗https://issues.apache.org/jira/browse/mesos-1656

alen0pnh

alen0pnh2#

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

相关问题