testcontainers / testcontainers/testcontainers-java
[Bug]: Testcontainers ignores Docker proxies settings
Nessuno ha ancora preso questa issue.
- Lingua principale
- Java
- Stelle
- 8.7k
- Fork
- 1.9k
- Merge medio
- 2g 17h
- PR unite (30g)
- 9
Descrizione
Module
Core
Testcontainers version
1.17.5
Using the latest Testcontainers version?
Yes
Host OS
Linux
Host Arch
x86_64
Docker version
Client: Docker Engine - Community
Version: 20.10.9
API version: 1.41
Go version: go1.16.8
Git commit: c2ea9bc
Built: Mon Oct 4 16:08:29 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.9
API version: 1.41 (minimum version 1.12)
Go version: go1.16.8
Git commit: 79ea9d3
Built: Mon Oct 4 16:06:37 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.11
GitCommit: 5b46e404f6b9f661a205e28d59c982d3634148f8
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
What happened?
It seems that Testcontainers doesn't load HTTPS_PROXY and HTTP_PROXY environment variables inside the container build process whereas Docker successfully include those variables when it builds images itself.
I have an authenticated enterprise proxy which I set up on my local machine using the ~/.docker/config.json file
{
"proxies":
{
"default":
{
"httpProxy": "http://myproxyuser:myproxypassword@proxy.example.com:3128",
"httpsProxy": "http://myproxyuser:myproxypassword@proxy.example.com:3128",
"noProxy": "localhost,127.0.0.1,docker-registry.example.com,.corp"
}
}
}
as well as using a /etc/systemd/system/docker.service.d/http-proxy.conf file which looks like
[Service]
Environment="HTTP_PROXY=http://myproxyuser:myproxypassword@proxy.example.com:3128"
Environment="HTTPS_PROXY=http://myproxyuser:myproxypassword@proxy.example.com:3128"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
I developed the following project to illustrate my problem : when I run ./build-using-docker.sh https://proxy.example.com/proxy.crt it launches a ./mvnw --settings /home/myuser/.m2/settings.proxy.xml clean package command inside a Docker container run like this docker run -it --rm -u 1000:998 -v /home/myuser/myprojects/testcontainers-proxy-issue:/home/myuser/myprojects/testcontainers-proxy-issue -w /home/myuser/myprojects/testcontainers-proxy-issue -v /home/myuser/.m2:/home/myuser/.m2 -v /var/run/docker.sock:/var/run/docker.sock -e 'MAVEN_OPTS=-Dhttps.proxyHost=proxy.example.com -Dhttps.proxyPort=3128 -Dhttps.proxyUser=myproxyuser -Dhttps.proxyPassword=myproxypassword -Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128 -Dhttp.proxyUser=myproxyuser -Dhttp.proxyPassword=myproxypassword -Djavax.net.ssl.trustStore=./proxy-data/cacerts -Duser.home=/home/myuser' -v /home/myuser/.docker/config.json:/home/myuser/.docker/config.json -e DOCKER_CONFIG=/home/myuser/.docker eclipse-temurin:17-jdk-alpine sh -cex 'cp /opt/java/openjdk/lib/security/cacerts ./proxy-data/ && keytool -importcert -alias proxy.crt -file ./proxy-data/proxy.crt -trustcacerts -keystore ./proxy-data/cacerts -storepass changeit -noprompt; ./mvnw --settings /home/myuser/.m2/settings.proxy.xml clean package'.
Then Maven launches the tests of the projects which executes findAllTest() test which launches @ExtendWith(OpenldapTestContainerIntegrationTestExtension.class) before, which executes the following code:
final var imageFromDockerfile = new ImageFromDockerfile()
.withFileFromPath(".", Path.of("src", "main", "docker"));
The targetted Dockerfile only contains this:
FROM bitnami/openldap:2.6
RUN test -n "$HTTPS_PROXY" || exit 42
Here is the JUnit failing log:
[ERROR] Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.959 s <<< FAILURE! - in com.github.anthony_o.testcontainers_proxy_issue.repository.UserRepositoryIntegrationTest
[ERROR] com.github.anthony_o.testcontainers_proxy_issue.repository.UserRepositoryIntegrationTest Time elapsed: 1.957 s <<< ERROR!
org.testcontainers.containers.ContainerLaunchException: Container startup failed
Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=<resolving>, imagePullPolicy=DefaultPullPolicy(), imageNameSubstitutor=org.testcontainers.utility.ImageNameSubstitutor$LogWrappedImageNameSubstitutor@4a0df195)
Caused by: com.github.dockerjava.api.exception.DockerClientException: Could not build image: The command '/bin/bash -o pipefail -c test -n "$HTTPS_PROXY" || exit 42' returned a non-zero code: 42
Whereas if I simply run the following Docker command, it succeed:
docker build src/main/docker/ -t testcontainers-proxy-issue --no-cache
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM bitnami/openldap:2.6
---> eb7e0974d701
Step 2/2 : RUN test -n "$HTTPS_PROXY" || exit 42
---> Running in e298e31d18f4
Removing intermediate container e298e31d18f4
---> 5a87cf389f41
Successfully built 5a87cf389f41
Successfully tagged testcontainers-proxy-issue:latest
Relevant log output
No response
Additional Information
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione collegata, in particolare OpenldapTestContainerIntegrationTestExtension.java, UserRepositoryIntegrationTest.java e il relativo Dockerfile. Esegui findAllTest() e confronta la build di ImageFromDockerfile con la docker build diretta mostrata nel report. Il lavoro è completato quando il controllo HTTPS_PROXY del Dockerfile ha esito positivo durante la build dell’immagine tramite Testcontainers e il test passa.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- docker, java
- Ambito
- devops, testing
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100