I'll let Tim Chen help you out here since he has more context. Some slave
logs around the failed container launch would be helpful.


On Mon, Sep 29, 2014 at 5:03 PM, Andy Grove <[email protected]>
wrote:

> Ignore my comment about docker run not returning. That is incorrect.
>
> Thanks,
>
> Andy.
>
> --
> Andy Grove
> VP Engineering
> CodeFutures Corporation
>
>
>
> On Mon, Sep 29, 2014 at 5:59 PM, Andy Grove <[email protected]>
> wrote:
>
>> 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
>>>>
>>>>
>>>>
>>>
>>
>

Reply via email to