Search code examples
javadockerhttp-proxytestcontainersdocker-java

Testcontainers with a company proxy


Each start of different testcontainers will throw com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"Get https://quay.io/v1/_ping: dial tcp x.x.x.x: getsockopt: connection refused"}

This is no surprise (docker is behind a company proxy). How can I configure testcontainers to use a specific HTTP proxy?

Another approach could be disabling the "ping" command and using our company docker repo.


Solution

  • You can by specifying env variables when you are building an image or running a container. For example, below I'm building an Elasticsearch container by passing proxy configuration:

    GenericContainer container = new GenericContainer("docker.elastic.co/elasticsearch/elasticsearch:6.1.1")
                .withExposedPorts(9200)
                .withEnv("discovery.type", "single-node")
                .withEnv("HTTP_PROXY", "http://127.0.0.1:3001")
                .withEnv("HTTPS_PROXY", "http://127.0.0.1:3001")
                .waitingFor(Wait.forHttp("/_cat/health?v&pretty")
                        .forStatusCode(200));
    

    Otherwise, you can set your proxy settings globally in docker. For windows with a docker machine you have to connect to it and the HTTP proxy in boot2docker profile.

    docker-machine ssh default
    
    sudo -s
    
    echo "export HTTP_PROXY=http://your.proxy" >> /var/lib/boot2docker/profile
    echo "export HTTPS_PROXY=http://your.proxy" >> /var/lib/boot2docker/profile
    

    On Linux, you can create a file ~/.docker/config.json like :

    {
     "proxies":
     {
      "default":
      {
        "httpProxy": "http://127.0.0.1:3001",
        "noProxy": "*.test.example.com,.example2.com"
      }
     }
    }