package io.urmia.jail.docker; import com.github.dockerjava.api.DockerClient; import com.github.dockerjava.api.command.CreateContainerResponse; import com.github.dockerjava.api.model.Bind; import com.github.dockerjava.api.model.Volume; import com.github.dockerjava.core.DockerClientImpl; import io.urmia.job.XargsJobExecutor; import io.urmia.md.model.job.JobDefinition; public class DockerJavaJobExecutor extends XargsJobExecutor { public static final String DOCKER_SCRIPT_PATH = "/opt/urmia/bin/job-runner.sh"; public static final String DOCKER_MOUNT_POINT = "/urmia/"; public DockerJavaJobExecutor(String hostId, JobDefinition jobDef, String jobId) { super(hostId, jobDef, jobId, DOCKER_MOUNT_POINT, JobDefinition.Phase.Type.MAP); DockerClient client = new DockerClientImpl("http://localhost:2375"); String command = String.format("/opt/urmia/bin/job-runner.sh -j %s -c '%s'", jobId, jobDef.getPhases().get(0).exec.get(0).getCommand()); System.err.println("command: " + command); String[] commands = new String[]{command}; Volume volJobs = new Volume("/urmia/jobs"); Volume volStor = new Volume("/urmia/stor"); Bind bindJobs = new Bind("/var/tmp/urmia/tck/ods/1/tck/jobs", volJobs); Bind bindStor = new Bind("/var/tmp/urmia/tck/ods/1/tck/stor", volStor); CreateContainerResponse container = client .createContainerCmd("urmia/debian") .withCmd(commands) .exec(); client.startContainerCmd(container.getId()).withBinds(bindJobs, bindStor); int exitCode = client.waitContainerCmd(container.getId()).exec(); System.out.println("info = " + client.infoCmd().exec()); } @Override protected String getScriptPath(String s) { return DOCKER_SCRIPT_PATH; } }