9

当我将 docker 容器作为马拉松作业运行时,它会在活动的 mesos 从属系统中创建一个 docker 容器。当暂停或销毁 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}
      ]
    }
  }
}
4

2 回答 2

1

Marathon 将重新启动一个失败的 docker 容器,以便您拥有所请求的实例数量。您可能会看到 Mesos 未清理的已停止/失败的容器。这可能与 Mesos 将容器清理延迟到 GC 之后的事实有关。见https://issues.apache.org/jira/browse/MESOS-1656

于 2016-02-17T09:22:43.723 回答
0

这是 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!"
于 2016-04-26T08:16:56.167 回答