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 >>>> >>>> >>>> >>> >> >

