From ccc6ebab5f5b7f75799117f383e1e0ef6e3f459a Mon Sep 17 00:00:00 2001 From: Kevin Wittek Date: Mon, 23 Jul 2018 16:52:05 +0200 Subject: [PATCH] Add support for transparently using local images with docker-compose --- .../containers/DockerComposeContainer.java | 6 ++++- .../junit/DockerComposeLocalImageTest.java | 27 +++++++++++++++++++ .../src/test/resources/local-compose-test.yml | 6 +++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java create mode 100644 core/src/test/resources/local-compose-test.yml diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index c98d092029b..272b4bc17f7 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -154,7 +154,11 @@ public void start() { synchronized (MUTEX) { registerContainersForShutdown(); if (pull) { - pullImages(); + try { + pullImages(); + } catch (ContainerLaunchException e) { + logger().warn("Exception while pulling images, using local images if available", e); + } } applyScaling(); // scale before up, so that all scaled instances are available first for linking createServices(); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java new file mode 100644 index 00000000000..890fa34b0f8 --- /dev/null +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalImageTest.java @@ -0,0 +1,27 @@ +package org.testcontainers.junit; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.core.command.PullImageResultCallback; +import org.junit.Test; +import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.DockerComposeContainer; + +import java.io.File; + +public class DockerComposeLocalImageTest { + + @Test + public void usesLocalImageEvenWhenPullFails() throws InterruptedException { + tagImage("redis:4.0.10", "redis-local", "latest"); + + DockerComposeContainer composeContainer = new DockerComposeContainer(new File("src/test/resources/local-compose-test.yml")) + .withExposedService("redis", 6379); + composeContainer.start(); + } + + private void tagImage(String sourceImage, String targetImage, String targetTag) throws InterruptedException { + DockerClient client = DockerClientFactory.instance().client(); + client.pullImageCmd(sourceImage).exec(new PullImageResultCallback()).awaitCompletion(); + client.tagImageCmd(sourceImage, targetImage, targetTag).exec(); + } +} diff --git a/core/src/test/resources/local-compose-test.yml b/core/src/test/resources/local-compose-test.yml new file mode 100644 index 00000000000..8d4f20e6924 --- /dev/null +++ b/core/src/test/resources/local-compose-test.yml @@ -0,0 +1,6 @@ +version: '2' +services: + redis: + image: redis-local:latest + ports: + - 6379