在自定义的mesos调度程序启动的Docker容器中运行自定义执行程序

Mesos自定义框架:我们的目标是启动docker集装箱。 如果容器有权访问作为URI一部分传递的jar文件,则此Docker容器应该具有自定义的执行程序。 这是编辑的代码摘录作为独立主类的一部分,作为框架的起点。

String path = "http://localhost/example/example-1.0-SNAPSHOT-jar-with-dependencies.jar"; Protos.CommandInfo.URI uri = Protos.CommandInfo.URI.newBuilder().setValue(path).setExtract(false).build(); String command = "java -cp example-1.0-SNAPSHOT-jar-with-dependencies.jar com.example.ExampleExecutor"; Protos.CommandInfo commandInfo = Protos.CommandInfo.newBuilder().setValue(command).addUris(uri).build(); Protos.ContainerInfo.DockerInfo.Builder dockerInfo = Protos.ContainerInfo.DockerInfo.newBuilder(); dockerInfo.setImage(imageName); dockerInfo.setNetwork(Protos.ContainerInfo.DockerInfo.Network.BRIDGE); Protos.ContainerInfo.Builder containerInfo = Protos.ContainerInfo.newBuilder(); containerInfo.setType(Protos.ContainerInfo.Type.DOCKER); containerInfo.setDocker(dockerInfo.build()); Protos.ExecutorInfo exampleExecutor = Protos.ExecutorInfo.newBuilder() .setExecutorId(Protos.ExecutorID.newBuilder().setValue("ExampleExecutor")) .setCommand(commandInfo) .setName("Example Executor") .setContainer(containerInfo) .setSource("java") .build(); 

Mesos自定义调度程序:下面是用于启动泊坞窗任务的代码摘录。 我们希望将Docker作为执行者而不是任务。

 Protos.TaskInfo task = Protos.TaskInfo.newBuilder() .setName("task " + taskId).setTaskId(taskId) .setSlaveId(offer.getSlaveId()) .addResources(buildResource("cpus", job.getCpu())) .addResources(buildResource("mem", 128)) .setData(ByteString.copyFromUtf8(ExampleModelObject.toJSON())) .setExecutor(Protos.ExecutorInfo.newBuilder(exampleExecutor)) .build(); 

我不确定它到底在做什么。 我们的容器是通过mesos启动的,但是jar文件在容器内部是不可用的,所以在容器内运行executor类的命令由于无法加载主类而失败。 此外,我不知道如果docker集装箱作为任务或执行者运行。 没有在互联网上find任何相关的问题。