Hi,

I've working on a prototype Mesos framework to launch docker containers.
I'm getting as far as seeing my container start up but after one minute if
gets killed due to:

Terminating executor default of framework
20140929-155916-16777343-5050-2708-0004 because it did not register within
1mins

Here is the code I am using in my scheduler, which was based on one of the
examples:

  @Override
  public void resourceOffers(SchedulerDriver schedulerDriver,
List<Protos.Offer> offers) {
    logger.info("resourceOffers() with {} offers", offers.size());

    for (Protos.Offer offer : offers) {

      List<Protos.TaskInfo> tasks = new ArrayList<Protos.TaskInfo>();
      if (launchedTasks < totalTasks) {
        Protos.TaskID taskId = Protos.TaskID.newBuilder()
            .setValue(Integer.toString(launchedTasks++)).build();

        logger.info("Launching task " + taskId.getValue());

        // docker image info
        Protos.ContainerInfo.DockerInfo.Builder dockerInfoBuilder =
Protos.ContainerInfo.DockerInfo.newBuilder();
        dockerInfoBuilder.setImage("codefutures/dbshards_zookeeper");

        // container info
        Protos.ContainerInfo.Builder containerInfoBuilder =
Protos.ContainerInfo.newBuilder();
        containerInfoBuilder.setType(Protos.ContainerInfo.Type.DOCKER);
        containerInfoBuilder.setDocker(dockerInfoBuilder.build());

        // create executor for the container
        Protos.ExecutorInfo executor = Protos.ExecutorInfo.newBuilder()

.setExecutorId(Protos.ExecutorID.newBuilder().setValue("default"))
            .setCommand(Protos.CommandInfo.newBuilder().setShell(false))
            .setContainer(containerInfoBuilder)
            .setName("Test Executor (Docker)")
            .setSource("docker_test")
            .build();

        // create task to run
        Protos.TaskInfo task = Protos.TaskInfo.newBuilder()
            .setName("task " + taskId.getValue())
            .setTaskId(taskId)
            .setSlaveId(offer.getSlaveId())
            .addResources(Protos.Resource.newBuilder()
                .setName("cpus")
                .setType(Protos.Value.Type.SCALAR)
                .setScalar(Protos.Value.Scalar.newBuilder().setValue(1)))
            .addResources(Protos.Resource.newBuilder()
                .setName("mem")
                .setType(Protos.Value.Type.SCALAR)
                .setScalar(Protos.Value.Scalar.newBuilder().setValue(128)))
            .setExecutor(Protos.ExecutorInfo.newBuilder(executor))
            .build();

        tasks.add(task);
      }
      Protos.Filters filters =
Protos.Filters.newBuilder().setRefuseSeconds(1).build();

      schedulerDriver.launchTasks(offer.getId(), tasks, filters);
    }

  }

Am I missing some steps with this approach?

Thanks,

Andy.

--
Andy Grove
VP Engineering
CodeFutures Corporation

Reply via email to