Hi Andy,

You don't need to specifiy -d as the docker containerizer will set it for
you since we run all docker images detached.

It seems like the executor just simply can't register with the slave. Can
you try just running a simple command without Docker that takes longer than
the executor registration timeout to see if you see the same error?

Also do you run the mesos slave in a docker container as well?

Will be great if you can share the slave log as Vinod suggested too.

Tim






On Mon, Sep 29, 2014 at 5:15 PM, Vinod Kone <[email protected]> wrote:

> 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