in containers-docker-local/src/main/java/org/apache/aries/containers/docker/local/impl/LocalDockerServiceManager.java [118:177]
ContainerImpl createDockerContainer(ServiceConfig config) throws Exception {
List<String> command = new ArrayList<>();
command.add("-d");
command.add("-l");
command.add(SERVICE_NAME_LABEL + "=" + config.getServiceName());
String ep = config.getEntryPoint();
if (ep != null) {
command.add("--entrypoint");
command.add(ep);
}
Map<Integer, Integer> ports = new HashMap<>();
for (Integer p : config.getContainerPorts()) {
command.add("-p");
int freePort = getFreePort();
command.add(freePort + ":" + p);
ports.put(p, freePort);
}
for(Map.Entry<String, String> entry : config.getEnvVars().entrySet()) {
command.add("-e");
command.add(entry.getKey() + '=' + entry.getValue());
}
command.add("--cpus");
command.add("" + config.getRequestedCpuUnits() + "");
command.add("-m");
command.add("" + ((int) config.getRequestedMemory()) + "m");
command.add(config.getContainerImage());
command.addAll(Arrays.asList(config.getCommandLine()));
if (config.getHealthChecks().size() > 0) {
// Only one healthcheck supported
HealthCheck hc = config.getHealthChecks().get(0);
if (hc.getType() != HealthCheck.Type.COMMAND) {
throw new UnsupportedOperationException("Health check of type " + hc.getType() +
" not supported. Docker only supports health checks of type COMMAND");
}
command.add("--health-cmd");
command.add(hc.getParameters());
command.add("--health-interval");
command.add(hc.getInterval() + "s");
command.add("--health-retries");
command.add("" + hc.getMaxFailures());
// TODO Add this when docker supports it in a release.
// command.add("--health-start-period");
// command.add(hc.getGracePeriod() + "s");
command.add("--health-timeout");
command.add(hc.getTimeout() + "s");
}
DockerContainerInfo info = docker.run(command);
return new ContainerImpl(info.getID(), info.getIP(), ports);
}