8

Local env:

  • MacOS 10.14.6
  • Docker Desktop 2.0.1.2
  • Docker Engine 19.03.2
  • Compose Engine 1.24.1
  • Test containers 1.12.1

I'm using Elastic search in an app, and I want to be able to use TestContainers in my integration tests. Sample code in a Play Framework app that uses ElasticSearch testcontainer:

@BeforeAll
public static void setup() {
    private static final ElasticsearchContainer ES = new ElasticsearchContainer();
    ES.start();
}

This works when testing locally, but I want to be able to run this inside a Docker container to run on my CI server. I'm getting this exception when running the tests inside the Docker container:

[warn] o.t.u.RegistryAuthLocator - Failure when attempting to lookup auth config (dockerImageName: alpine:3.5, configFile: /root/.docker/config.json. Falling back to docker-java default behaviour. Exception message: /root/.docker/config.json (No such file or directory)
[warn] o.t.u.RegistryAuthLocator - Failure when attempting to lookup auth config (dockerImageName: quay.io/testcontainers/ryuk:0.2.3, configFile: /root/.docker/config.json. Falling back to docker-java default behaviour. Exception message: /root/.docker/config.json (No such file or directory)
        ?? Checking the system...
        ? Docker version should be at least 1.6.0
        ? Docker environment should have more than 2GB free disk space
[warn] o.t.u.RegistryAuthLocator - Failure when attempting to lookup auth config (dockerImageName: docker.elastic.co/elasticsearch/elasticsearch:7.1.1, configFile: /root/.docker/config.json. Falling back to docker-java default behaviour. Exception message: /root/.docker/config.json (No such file or directory)
[error] d.e.c.1.1] - Could not start container
org.testcontainers.containers.ContainerLaunchException: Timed out waiting for URL to be accessible (http://172.17.0.1:32911/ should return HTTP [200])
    at org.testcontainers.containers.wait.strategy.HttpWaitStrategy.waitUntilReady(HttpWaitStrategy.java:197)
    at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:35)
    at org.testcontainers.containers.GenericContainer.waitUntilContainerStarted(GenericContainer.java:675)
    at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:332)
    at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:285)
    at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
    at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:283)
    at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:272)
    at controllers.HomeControllerTest.setup(HomeControllerTest.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

I've read the instructions here: https://www.testcontainers.org/supported_docker_environment/continuous_integration/dind_patterns/

So my docker-compose.yml looks like (note: I've been testing with another ES container as seen commented out below, but I have not been using it with this test)($INSTANCE is a random 16 char string for a particular test run):

version: '3'

services:
  # elasticsearch:
  #   container_name: elasticsearch_${INSTANCE}
  #   image: docker.elastic.co/elasticsearch/elasticsearch:6.7.2
  #   ports:
  #     - 9200:9200
  #     - 9300:9300
  #   command: elasticsearch -E transport.host=0.0.0.0
  #   logging:
  #     driver: 'none'
  #   environment:
  #     ES_JAVA_OPTS: "-Xms750m -Xmx750m"
  mainapp:
    container_name: mainapp_${INSTANCE}
    image: test_image:${INSTANCE}
    stop_signal: SIGKILL
    stdin_open: true
    tty: true
    working_dir: $PWD
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - $PWD:$PWD
    environment:
      ES_JAVA_OPTS: "-Xms1G -Xmx1G"
    command: /bin/bash /projectfolder/build/tests/wrapper.sh

I've also tried running my tests with this command but received the same error:

docker run -it --rm -v $PWD:$PWD -w $PWD -v /var/run/docker.sock:/var/run/docker.sock test_image:68F75D8FD4C7003772C7E52B87B774F5 /bin/bash /testproject/build/tests/wrapper.sh

I tried creating a postgres container the same way inside my testing container and had no issues. I've also tried making a GenericContainer with the Elasticsearch image with no luck.

I don't think this is a connection issue because if I run curl 172.17.0.1:{port printed to test console} from inside my test container, I do get a valid elastic search response with status code 200, so it almost seems like its timing out trying to connect even though the connection is there.

Thanks.

Davis Mariotti
  • 574
  • 1
  • 4
  • 23

0 Answers0