@Test public void testContainerInstanceProperties() { final ContainerState container = waitStrategy.getContainer(); //check environment variable was set assertThat("Environment variable set correctly", Arrays.asList(Objects.requireNonNull(container.getContainerInfo() .getConfig().getEnv())), hasItem("bar=bar")); //check other container properties assertNotNull("Container id is not null", container.getContainerId()); assertNotNull("Port mapped", container.getMappedPort(3000)); assertThat("Exposed Ports", container.getExposedPorts(), hasItem(3000)); }
@Test public void createContainerCmdHookTest() { // Use random name to avoid the conflicts between the tests String randomName = Base58.randomString(5); try( GenericContainer container = new GenericContainer<>("redis:3.0.2") .withCommand("redis-server", "--help") .withCreateContainerCmdModifier(cmd -> cmd.withName("overrideMe")) // Preserves the order .withCreateContainerCmdModifier(cmd -> cmd.withName(randomName)) // Allows to override pre-configured values by GenericContainer .withCreateContainerCmdModifier(cmd -> cmd.withCmd("redis-server", "--port", "6379")) ) { container.start(); assertEquals("Name is configured", "/" + randomName, container.getContainerInfo().getName()); assertEquals("Command is configured", "[redis-server, --port, 6379]", Arrays.toString(container.getContainerInfo().getConfig().getCmd())); } }
@Test public void customLabelTest() { try (final GenericContainer alpineCustomLabel = new GenericContainer("alpine:3.2") .withLabel("our.custom", "label") .withCommand("top")) { alpineCustomLabel.start(); Map<String, String> labels = alpineCustomLabel.getCurrentContainerInfo().getConfig().getLabels(); assertTrue("org.testcontainers label is present", labels.containsKey("org.testcontainers")); assertTrue("our.custom label is present", labels.containsKey("our.custom")); assertEquals("our.custom label value is label", labels.get("our.custom"), "label"); } }
containerConfig = mapper.readValue(image.getContainerConfig(), ContainerConfig.class); } else { containerConfig = new ContainerConfig(); hostConfig = new HostConfig(); ExposedPort[] exposedPorts = containerConfig.getExposedPorts(); .withEnv(containerConfig.getEnv()) .withExposedPorts(exposedPorts) .withCmd(containerConfig.getCmd()) .withAttachStderr(containerConfig.isAttachStderr()) .withAttachStdin(containerConfig.isAttachStdin()) .withAttachStdout(containerConfig.isAttachStdout()) .withCpuShares(containerConfig.getCpuShares()) .withDisableNetwork(containerConfig.isNetworkDisabled()) .withWorkingDir(containerConfig.getWorkingDir()) .withMemoryLimit(containerConfig.getMemoryLimit()) .withMemorySwap(containerConfig.getMemorySwap()) .withHostName(containerConfig.getHostName()) .withUser(containerConfig.getUser()) .withPortSpecs(containerConfig.getPortSpecs()) .withStdinOpen(containerConfig.isStdinOpen()) .withTty(containerConfig.isTty()).exec();
instance.setHostname((String) fixEmptyValue(containerConfig.getHostName())); setField(instance, FIELD_MEMORY, containerConfig.getMemoryLimit()); setField(instance, FIELD_CPU_SET, containerConfig.getCpuset()); setField(instance, FIELD_CPU_SHARES, containerConfig.getCpuShares()); setField(instance, FIELD_MEMORY_SWAP, containerConfig.getMemorySwap()); setField(instance, FIELD_DOMAIN_NAME, containerConfig.getDomainName()); setField(instance, FIELD_USER, containerConfig.getUser()); setField(instance, FIELD_TTY, containerConfig.isTty()); setField(instance, FIELD_STDIN_OPEN, containerConfig.isStdinOpen()); setImage(instance, containerConfig.getImage()); setField(instance, FIELD_WORKING_DIR, containerConfig.getWorkingDir()); setEnvironment(instance, containerConfig.getEnv()); setCommand(instance, containerConfig.getCmd()); setListField(instance, FIELD_ENTRY_POINT, containerConfig.getEntrypoint()); setField(instance, FIELD_VOLUME_DRIVER, fromInspect, "Config", "VolumeDriver"); setField(instance, FIELD_STOP_SIGNAL, fromInspect, CONFIG, "StopSignal"); setVolumes(instance, containerConfig.getVolumes(), hostConfig.getBinds()); setPorts(instance, safeGetExposedPorts(containerConfig), hostConfig.getPortBindings());
public String getHostName() { return containerInfo.getConfig().getHostName(); }
private Stream<Container> asContainer(String container) { return inspectContainerCmd(container) .map(response -> new Container( response.getConfig().getHostName(), new DockerImage(response.getConfig().getImage()), containerResourcesFromHostConfig(response.getHostConfig()), new ContainerName(decode(response.getName())), Container.State.valueOf(response.getState().getStatus().toUpperCase()), response.getState().getPid() )) .map(Stream::of) .orElse(Stream.empty()); }
private ExposedPort[] safeGetExposedPorts(ContainerConfig containerConfig) { try { return containerConfig.getExposedPorts(); } catch (NullPointerException e) { // Bug in docker-java doesn't account for this property being null return null; } }
@Restricted(NoExternalUse.class) public DockerTransientNode provisionNode(DockerAPI api, TaskListener listener) throws IOException, Descriptor.FormException, InterruptedException { try { final InspectImageResponse image = pullImage(api, listener); if (StringUtils.isBlank(remoteFs)) { remoteFs = image.getContainerConfig().getWorkingDir(); } if (StringUtils.isBlank(remoteFs)) { remoteFs = "/"; } try(final DockerClient client = api.getClient()) { return doProvisionNode(api, client, listener); } } catch (IOException | Descriptor.FormException | InterruptedException | RuntimeException ex) { final DockerCloud ourCloud = DockerCloud.findCloudForTemplate(this); final long milliseconds = ourCloud == null ? 0L : ourCloud.getEffectiveErrorDurationInMilliseconds(); if (milliseconds > 0L) { // if anything went wrong, disable ourselves for a while final String reason = "Template provisioning failed."; final DockerDisabled reasonForDisablement = getDisabled(); reasonForDisablement.disableBySystem(reason, milliseconds, ex); setDisabled(reasonForDisablement); } throw ex; } }
public static String getContainerHostname(GenericContainer container) { InspectContainerResponse containerInfo = container.getContainerInfo(); if (containerInfo == null) { containerInfo = container.getDockerClient().inspectContainerCmd(container.getContainerId()).exec(); } return containerInfo.getConfig().getHostName(); }
public ContainerAssert hasExposedPorts(String... ports) { isNotNull(); List<ExposedPort> exposedPorts = new ArrayList<ExposedPort>(); for (String port : ports) { exposedPorts.add(ExposedPort.parse(port)); } ExposedPort[] myports = new ExposedPort[exposedPorts.size()]; exposedPorts.toArray(myports); assertThat(getContainerConfig().getExposedPorts()) .overridingErrorMessage("%nExpecting:%n <%s>%nto contain:%n <%s>", getContainerConfig().getExposedPorts(), Arrays.asList(ports)) .contains(myports); return this; }
@Test @DisplayName("start a container without ports") public void shouldStartContainer() { String containerId = defaultDockerClient.startContainer(WANTED_IMAGE, emptyMap()); assertThat(dockerClient.listContainersCmd().exec()).hasSize(existingContainers.size() + 1); InspectContainerResponse startedContainer = dockerClient.inspectContainerCmd(containerId).exec(); assertThat(startedContainer.getConfig().getImage()).isEqualTo(WANTED_IMAGE); }
).withEnv( ContainersProvider.KAFKA_ZOOKEEPER_CONNECT_KEY, String.format("%s:%d", zookeeper.getContainerInfo().getConfig().getHostName(), ContainersProvider.ZOOKEEPER_PORT) ).withEnv( ContainersProvider.KAFKA_CREATE_TOPICS_KEY,
public static Binding binding(DockerClientExecutor executor, String cubeId) { InspectContainerResponse inspectResponse = executor.getDockerClient().inspectContainerCmd(cubeId).exec(); String dockerIp = getDockerServerIp(executor); String inernalIp = null; NetworkSettings networkSettings = inspectResponse.getNetworkSettings(); if (networkSettings != null) { inernalIp = networkSettings.getIpAddress(); } Binding binding = new Binding(dockerIp, inernalIp); HostConfig hostConfig = inspectResponse.getHostConfig(); if (hostConfig.getPortBindings() != null) { for (Entry<ExposedPort, com.github.dockerjava.api.model.Ports.Binding[]> bind : hostConfig.getPortBindings() .getBindings().entrySet()) { com.github.dockerjava.api.model.Ports.Binding[] allBindings = bind.getValue(); for (com.github.dockerjava.api.model.Ports.Binding bindings : allBindings) { binding.addPortBinding(bind.getKey().getPort(), Integer.parseInt(bindings.getHostPortSpec())); } } } else { ContainerConfig connectionConfig = inspectResponse.getConfig(); final ExposedPort[] exposedPorts = connectionConfig.getExposedPorts(); if (exposedPorts != null) { for (ExposedPort port : exposedPorts) { binding.addPortBinding(port.getPort(), -1); } } } return binding; }
@Test @DisplayName("add latest to the image name if none is given") public void shouldStartLatestContainer() { String containerId = defaultDockerClient.startContainer("faustxvi/simple-two-ports", emptyMap()); List<Container> currentContainers = dockerClient.listContainersCmd().exec(); assertThat(currentContainers).hasSize(existingContainers.size() + 1); InspectContainerResponse startedContainer = dockerClient.inspectContainerCmd(containerId).exec(); assertThat(startedContainer.getConfig().getImage()).isEqualTo(WANTED_IMAGE); } }
public Stream<String> environment() { return Stream.concat(containersInspect.stream(), containersInspectPerTest.stream()) .map((c) -> c.getConfig().getEnv()).flatMap(Stream::of); }
).withEnv( ContainersProvider.KAFKA_ZOOKEEPER_CONNECT_KEY, String.format("%s:%d", zookeeper.getContainerInfo().getConfig().getHostName(), ContainersProvider.ZOOKEEPER_PORT) ).withEnv( ContainersProvider.KAFKA_CREATE_TOPICS_KEY,
public static Binding binding(DockerClientExecutor executor, String cubeId) { InspectContainerResponse inspectResponse = executor.getDockerClient().inspectContainerCmd(cubeId).exec(); String dockerIp = getDockerServerIp(executor); String inernalIp = null; NetworkSettings networkSettings = inspectResponse.getNetworkSettings(); if (networkSettings != null) { inernalIp = networkSettings.getIpAddress(); } Binding binding = new Binding(dockerIp, inernalIp); HostConfig hostConfig = inspectResponse.getHostConfig(); if (hostConfig.getPortBindings() != null) { for (Entry<ExposedPort, com.github.dockerjava.api.model.Ports.Binding[]> bind : hostConfig.getPortBindings() .getBindings().entrySet()) { com.github.dockerjava.api.model.Ports.Binding[] allBindings = bind.getValue(); for (com.github.dockerjava.api.model.Ports.Binding bindings : allBindings) { binding.addPortBinding(bind.getKey().getPort(), Integer.parseInt(bindings.getHostPortSpec())); } } } else { ContainerConfig connectionConfig = inspectResponse.getConfig(); final ExposedPort[] exposedPorts = connectionConfig.getExposedPorts(); if (exposedPorts != null) { for (ExposedPort port : exposedPorts) { binding.addPortBinding(port.getPort(), -1); } } } return binding; }