Hi Vinod,
Thanks for the quick response but the image is already on the slave and I
see the container being launched almost immediately when my framework
starts (within 1-2 seconds). If I keep running docker ps, this is the last
output I see before the container is killed:
$ docker ps
CONTAINER ID IMAGE COMMAND
CREATED STATUS PORTS NAMES
45f992c2781f codefutures/dbshards_zookeeper:latest "/bin/sh -c
'/opt/zo 59 seconds ago Up 58 seconds
I am using mesos 0.20.1 and docker 1.2.0 on Ubuntu 14.04.
So the container is running fine. It is a long running service i.e. the
docker run command will never return. Should I be providing some option so
that the docker executor passed the -d flag to the docker run command? I
guess I should start looking through the mesos source so I can see how this
works.
Thanks,
Andy.
--
Andy Grove
VP Engineering
CodeFutures Corporation
On Mon, Sep 29, 2014 at 5:49 PM, Vinod Kone <[email protected]> wrote:
> Trying increasing the executor registration timeout on the slave
> (--executor_registration_timeout) to give docker more time to do a pull of
> the image.
>
> On Mon, Sep 29, 2014 at 4:41 PM, Andy Grove <[email protected]>
> wrote:
>
>> 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
>>
>>
>>
>