.openStdin(openStdin) .stdinOnce(stdinOnce) .image(image) .workingDir(workingDir) .networkDisabled(networkDisabled)
.image(image) .env(flattenedEnvVars) .exposedPorts(exposedPorts)
@Before public void setup() throws Exception { try (final DockerClient docker = getNewDockerClient()) { // Build an image with an ENTRYPOINT and CMD prespecified final String dockerDirectory = Resources.getResource("syslog-test-image").getPath(); docker.build(Paths.get(dockerDirectory), testImage); // Figure out the host IP from the container's point of view (needed for syslog) final ContainerConfig config = ContainerConfig.builder() .image(BUSYBOX) .cmd(asList("ip", "route", "show")) .build(); final ContainerCreation creation = docker.createContainer(config); final String containerId = creation.id(); docker.startContainer(containerId); // Wait for the container to exit. // If we don't wait, docker.logs() might return an epmty string because the container // cmd hasn't run yet. docker.waitContainer(containerId); final String log; try (LogStream logs = docker.logs(containerId, stdout(), stderr())) { log = logs.readFully(); } final Matcher m = DEFAULT_GATEWAY_PATTERN.matcher(log); if (m.find()) { syslogHost = m.group("gateway"); } else { fail("couldn't determine the host address from '" + log + "'"); } } }
private ContainerCreation createContainer(DockerClient docker) { LOG.debug("Creating Couchbase Docker container '{}'", CONTAINER_NAME); // Bind container ports to host ports final String[] ports = {"8091", "8092", "8093", "8094", "11207", "11210", "11211"}; final Map<String, List<PortBinding>> portBindings = new HashMap<>(); for (String port : ports) { List<PortBinding> hostPorts = new ArrayList<>(); hostPorts.add(PortBinding.of("0.0.0.0", port)); portBindings.put(port + "/tcp", hostPorts); } HostConfig hostConfig = HostConfig.builder() .portBindings(portBindings) .build(); // Create container ContainerConfig config = ContainerConfig.builder() .image(COUCHBASE_LATEST_IMAGE_NAME) .hostConfig(hostConfig) .build(); try { ContainerCreation container = docker.createContainer(config, CONTAINER_NAME); LOG.debug("Couchbase Docker container '{}' created", CONTAINER_NAME); return container; } catch (DockerException | InterruptedException e) { throw new EnvironmentBuilderException("Unable to create Couchbase Docker container. Is one already running with the same name?", e); } }
@Override public void start(WorkflowInstance workflowInstance, RunSpec runSpec) { final String imageTag = runSpec.imageName().contains(":") ? runSpec.imageName() : runSpec.imageName() + ":latest"; final ContainerCreation creation; try { boolean found = false; for (Image image : client.listImages()) { found |= image.repoTags().contains(imageTag); } if (!found) { client.pull(imageTag, System.out::println); // blocking } final ContainerConfig containerConfig = ContainerConfig.builder() .image(imageTag) .cmd(runSpec.args()) .build(); creation = client.createContainer(containerConfig, runSpec.executionId()); client.startContainer(creation.id()); } catch (DockerException | InterruptedException e) { throw new RuntimeException(e); } inFlight.put(creation.id(), workflowInstance); LOG.info("Started container with id " + creation.id() + " and name " + runSpec.executionId()); }
private ContainerCreation createContainer() { LOG.debug("Creating Docker container '{}'", containerName); final Map<String, List<PortBinding>> portBindings = new HashMap<>(); for (int dockerPort : ports.keySet()) { List<PortBinding> hostPorts = new ArrayList<>(); hostPorts.add(PortBinding.of("0.0.0.0", ports.get(dockerPort))); portBindings.put(dockerPort + "/tcp", hostPorts); } HostConfig hostConfig = HostConfig.builder() .portBindings(portBindings) .build(); // Create container ContainerConfig config = ContainerConfig.builder() .image(imageName) .hostConfig(hostConfig) .build(); try { ContainerCreation container = dockerClient.createContainer(config, containerName); LOG.debug("Docker container '{}' created", containerName); return container; } catch (DockerException | InterruptedException e) { throw new EnvironmentBuilderException("Unable to create Docker container. Is one already running with the same name?", e); } }
/** * Returns a new {@link ContainerConfig.Builder} based upon the given configuration. * * Descendant classes can override this method to customize the configuration of the Docker * container beyond what is allowed by {@link DockerConfig}. * * @param config * docker container configuration * @return a new {@link ContainerConfig.Builder} */ protected ContainerConfig.Builder createContainerConfig(final DockerConfig config) { final ContainerConfig.Builder builder = ContainerConfig.builder() // .hostConfig(createHostConfig(config).build()) // .image(config.getImage()) // .networkDisabled(false) // .exposedPorts(config.getPorts()); for (final ContainerConfigurer configurer : config.getContainerConfigurer()) { configurer.configureContainer(builder); } return builder; }
/** * Create docker container configuration for a job. * @param imageInfo The ImageInfo object. * @param properties Properties to resolve against. * @return The ContainerConfig object. */ public ContainerConfig containerConfig(final ImageInfo imageInfo, final Map<String, String> properties) { final ContainerConfig.Builder builder = ContainerConfig.builder(); builder.image(job.getImage()); builder.hostname(job.getHostname()); builder.cmd(containerCmdStrings(properties)); builder.hostname(containerHostname(properties)); builder.env(containerEnvStrings()); builder.exposedPorts(containerExposedPorts()); builder.volumes(volumes()); for (final ContainerDecorator decorator : containerDecorators) { decorator.decorateContainerConfig(job, imageInfo, builder); } return builder.build(); }
private ContainerConfig buildContainerConfig() { // Bind ports String[] ports = {String.valueOf(params.getPort())}; Map<String, List<PortBinding>> portBindings = new HashMap<>(); for (String port : ports) { List<PortBinding> hostPorts = new ArrayList<>(); hostPorts.add(PortBinding.of(ALL_NETWORK_INTERFACES, port)); portBindings.put(port, hostPorts); } HostConfig hostConfig = HostConfig.builder() .privileged(true) .portBindings(portBindings) .build(); // Compose command line for starting Corfu String cmdLine = new StringBuilder() .append("mkdir -p " + params.getStreamLogDir()) .append(" && ") .append("java -cp *.jar org.corfudb.infrastructure.CorfuServer ") .append(getCommandLineParams()) .toString(); return ContainerConfig.builder() .hostConfig(hostConfig) .image(IMAGE_NAME) .hostname(params.getName()) .exposedPorts(ports) .cmd("sh", "-c", cmdLine) .build(); }
protected ContainerConfig createContainerConfig(String imageName, String[] ports, String cmd) { Map<String, List<PortBinding>> portBindings = new HashMap<>(); for (String port : ports) { List<PortBinding> hostPorts = Collections.singletonList(PortBinding.randomPort("0.0.0.0")); portBindings.put(port, hostPorts); } HostConfig hostConfig = HostConfig.builder() .portBindings(portBindings) .build(); ContainerConfig.Builder configBuilder = ContainerConfig.builder() .hostConfig(hostConfig) .image(imageName) .networkDisabled(false) .exposedPorts(ports); if (cmd != null) { configBuilder = configBuilder.cmd(cmd); } return configBuilder.build(); }
public static void main(String[] args) throws DockerException, InterruptedException { System.out.println("Testing"); // Create a client based on DOCKER_HOST and DOCKER_CERT_PATH env vars try { final DockerClient docker = DefaultDockerClient.builder() .uri("http://192.168.99.100:2375") .build(); //Create a container ContainerConfig cc = ContainerConfig.builder() .image("nginx") .build(); final ContainerCreation container = docker.createContainer(cc); docker.startContainer(container.id()); } catch (Exception ex) { ex.printStackTrace(); } } }
public static FakeS3 create(DockerClient dockerClient) throws DockerException, InterruptedException, IOException { // make sure we have the image dockerClient.pull(IMAGE, System.err::println); Path directory = Files.createTempDirectory("fakeS3"); // bind a fakes3 image to a random host port int port = InstanceSpec.getRandomPort(); return new FakeS3(port, dockerClient.createContainer(ContainerConfig.builder() .hostConfig(HostConfig.builder().portBindings(ImmutableMap.of( CONTAINER_PORT, ImmutableList.of(PortBinding.of("0.0.0.0", port)) )).build()) .image(IMAGE) .exposedPorts(ImmutableSet.of(CONTAINER_PORT)) .build())); }
private ContainerConfig configureContainer(DockerTask task) throws Exception { Builder container = ContainerConfig.builder().image(task.getImage()); com.spotify.docker.client.messages.HostConfig.Builder hostConfig = HostConfig.builder(); configureTargetExecutable(task, container); configureVariables(task, container); configureVolumes(task, hostConfig); configurePorts(task, container); configureNetwork(task, container, hostConfig); // Set host config container.hostConfig(hostConfig.build()); final ContainerConfig containerConfig = container.build(); return containerConfig; }
@Override protected ContainerConfig getContainerConfig() { String timeZone = System.getProperty("user.timezone"); if(timeZone == null || timeZone.isEmpty()) { timeZone = "Etc/UTC"; } return ContainerConfig.builder() .image(getDockerImageName()) .exposedPorts("4444", "5900") .env("TZ=" + timeZone) .cmd("/opt/bin/entry_point.sh") .build(); }
private ContainerCreation createContainer() throws DockerException, InterruptedException { ContainerConfig containerConfig = ContainerConfig.builder() .image(imageName) .hostConfig(hostConfig) .cmd(commands) .env(env) .exposedPorts(usedContainerPorts) .build(); return dockerClient.createContainer(containerConfig, containerName); }
@Override protected ContainerConfig getContainerConfig() { String timeZone = Optional.of(System.getProperty("user.timezone")).orElse("Etc/UTC"); return ContainerConfig.builder() .image(getDockerImageName()) .exposedPorts("4444", "5900") .env("TZ=" + timeZone) .cmd("/opt/bin/entry_point.sh") .build(); }
.build(); final ContainerConfig config = ContainerConfig.builder() .image(ALPINE) // includes spotify/busybox:latest with netcat with udp support .cmd(asList("nc", "-p", port, "-l", "-u")) .exposedPorts(ImmutableSet.of(expose))
.build(); final ContainerConfig config = ContainerConfig.builder() .image(BUSYBOX) .cmd("nc", "-p", "4711", "-lle", "cat") .exposedPorts(ImmutableSet.of("4711/tcp"))
/** * Create docker container configuration for a job. * * @param imageInfo The ImageInfo object. * * @return The ContainerConfig object. */ public ContainerConfig containerConfig(final ImageInfo imageInfo, final Optional<String> dockerVersion) { final ContainerConfig.Builder builder = ContainerConfig.builder(); builder.image(job.getImage()); builder.cmd(job.getCommand()); builder.hostname(job.getHostname()); builder.env(containerEnvStrings()); builder.exposedPorts(containerExposedPorts()); builder.volumes(volumes().keySet()); builder.labels(job.getLabels()); for (final ContainerDecorator decorator : containerDecorators) { decorator.decorateContainerConfig(job, imageInfo, dockerVersion, builder); } return builder.build(); }
private void startContainer(final String name) throws DockerException, InterruptedException { docker.pull(BUSYBOX); final HostConfig hostConfig = HostConfig.builder().build(); final ContainerConfig config = ContainerConfig.builder() .image(BUSYBOX) .cmd(IDLE_COMMAND) .hostConfig(hostConfig) .build(); final ContainerCreation creation = docker.createContainer(config, name); final String containerId = creation.id(); docker.startContainer(containerId); } }