testcontainers / testcontainers/testcontainers-java

[Bug]: Docker Client protocol magically changed from tcp to http in oracle-xe

Offen
#8,794 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

resolution/waiting-for-info type/bug
Vorherrschende Sprache
Java
Sterne
8.7k
Forks
1.9k
Ø Merge
2 T. 17 Std.
Gemergte PRs (30 T.)
9

Beschreibung

Module

Oracle XE

Testcontainers version

1.19.7

Using the latest Testcontainers version?

No

Host OS

Linux

Host Arch

x86

Docker version
Server Version: 26.1.4
      API Version: 1.45
      Operating System: Alpine Linux v3.20 (containerized)
      Total Memory: 63009 MB
What happened?

I am using spring boot +
testImplementation 'org.springframework.boot:spring-boot-testcontainers'
to initialize stuff. I am running a junit test using a real db to do stuff.

When running testcontainers in dind gitlab-ci, I am setting DOCKER_HOST=tcp://dockerdind:8076 (tried port 2375/2376 also). Somehow the ryuk container works but when I try to initialize Oracle-xe using

new OracleContainer("gvenzl/oracle-xe:slim")
.withUsername("XX")
.withPassword("XX")
.withConnectTimeoutSeconds(120) //no effect on bug
.withStartupTimeoutSeconds(120) //no effect on bug
.withCopyFileToContainer(MountableFile.forClasspathResource("XXsql"), "/container-entrypoint-initdb.d/init.sql");
The container fails to initialize

Relevant log output
16:52:31.933 [ForkJoinPool-1-worker-1] INFO  o.t.d.DockerClientProviderStrategy -- Found Docker environment with Environment variables, system properties and defaults. Resolved dockerHost=tcp://dockerdind:8076
    16:52:31.935 [ForkJoinPool-1-worker-1] INFO  o.testcontainers.DockerClientFactory -- Docker host IP address is dockerdind
    16:52:31.952 [ForkJoinPool-1-worker-1] INFO  o.testcontainers.DockerClientFactory -- Connected to docker: 
      Server Version: 26.1.4
      API Version: 1.45
      Operating System: Alpine Linux v3.20 (containerized)
      Total Memory: 63009 MB
    16:52:31.985 [ForkJoinPool-1-worker-1] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling docker image: testcontainers/ryuk:0.6.0. Please be patient; this may take some time but only needs to be done once.
    16:52:31.992 [ForkJoinPool-1-worker-1] INFO  o.t.utility.RegistryAuthLocator -- Failure when attempting to lookup auth config. Please ignore if you don't have images in an authenticated registry. Details: (dockerImageName: testcontainers/ryuk:latest, configFile: /root/.docker/config.json, configEnv: DOCKER_AUTH_CONFIG). Falling back to docker-java default behaviour. Exception message: Status 404: No config supplied. Checked in order: /root/.docker/config.json (file not found), DOCKER_AUTH_CONFIG (not set)
    16:52:33.076 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Starting to pull image
    16:52:33.093 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
    16:52:33.664 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  2 pending,  1 downloaded,  0 extracted, (3 KB/? MB)
    16:52:33.721 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  1 pending,  2 downloaded,  0 extracted, (37 KB/? MB)
    16:52:33.791 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  0 pending,  3 downloaded,  0 extracted, (3 MB/6 MB)
    16:52:33.820 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  0 pending,  3 downloaded,  1 extracted, (3 MB/6 MB)
    16:52:33.900 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  0 pending,  3 downloaded,  2 extracted, (3 MB/6 MB)
    16:52:33.936 [docker-java-stream--623331358] INFO  tc.testcontainers/ryuk:0.6.0 -- Pulling image layers:  0 pending,  3 downloaded,  3 extracted, (6 MB/6 MB)
    16:52:33.949 [ForkJoinPool-1-worker-1] INFO  tc.testcontainers/ryuk:0.6.0 -- Image testcontainers/ryuk:0.6.0 pull took PT1.963095837S
    16:52:33.972 [ForkJoinPool-1-worker-1] INFO  tc.testcontainers/ryuk:0.6.0 -- Creating container for image: testcontainers/ryuk:0.6.0
    16:52:34.107 [ForkJoinPool-1-worker-1] INFO  tc.testcontainers/ryuk:0.6.0 -- Container testcontainers/ryuk:0.6.0 is starting: 04671a07aec9efde15793d51c36b5330cd598e1de5cf12a9f44d527d20fc38ec
    16:52:34.411 [ForkJoinPool-1-worker-1] INFO  tc.testcontainers/ryuk:0.6.0 -- Container testcontainers/ryuk:0.6.0 started in PT0.438817476S
    16:52:34.414 [ForkJoinPool-1-worker-1] INFO  o.t.utility.RyukResourceReaper -- Ryuk started - will monitor and terminate Testcontainers containers on JVM exit
    16:52:34.414 [ForkJoinPool-1-worker-1] INFO  o.testcontainers.DockerClientFactory -- Checking the system...
    16:52:34.414 [ForkJoinPool-1-worker-1] INFO  o.testcontainers.DockerClientFactory -- ✔︎ Docker server version should be at least 1.6.0
    16:52:34.416 [ForkJoinPool-1-worker-1] INFO  tc.gvenzl/oracle-xe:slim -- Pulling docker image: gvenzl/oracle-xe:slim. Please be patient; this may take some time but only needs to be done once.
    16:52:35.464 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Starting to pull image
    16:52:35.465 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  0 downloaded,  0 extracted, (0 bytes/0 bytes)
    16:52:36.389 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  5 pending,  1 downloaded,  0 extracted, (141 MB/? MB)
    16:52:36.946 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  4 pending,  2 downloaded,  0 extracted, (263 MB/? MB)
    16:52:37.346 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  3 pending,  3 downloaded,  0 extracted, (313 MB/? MB)
    16:52:38.209 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  2 pending,  4 downloaded,  0 extracted, (454 MB/? MB)
    16:52:38.865 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  1 pending,  5 downloaded,  0 extracted, (561 MB/? MB)
    16:52:39.319 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  1 pending,  5 downloaded,  1 extracted, (596 MB/? MB)
    16:52:40.174 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  1 extracted, (684 MB/717 MB)
    16:52:41.754 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  2 extracted, (690 MB/717 MB)
    16:52:44.801 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  3 extracted, (696 MB/717 MB)
    16:52:46.667 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  4 extracted, (705 MB/717 MB)
    16:52:48.694 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  5 extracted, (707 MB/717 MB)
    16:52:49.799 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pulling image layers:  0 pending,  6 downloaded,  6 extracted, (717 MB/717 MB)
    16:52:49.816 [ForkJoinPool-1-worker-1] INFO  tc.gvenzl/oracle-xe:slim -- Image gvenzl/oracle-xe:slim pull took PT15.399040448S
    16:52:49.816 [docker-java-stream-1694500792] INFO  tc.gvenzl/oracle-xe:slim -- Pull complete. 6 layers, pulled in 14s (downloaded 717 MB at 51 MB/s)
    16:52:49.819 [ForkJoinPool-1-worker-1] INFO  tc.gvenzl/oracle-xe:slim -- Creating container for image: gvenzl/oracle-xe:slim
    16:53:00.198 [ForkJoinPool-1-worker-1] INFO  tc.gvenzl/oracle-xe:slim -- Container gvenzl/oracle-xe:slim is starting: 016b284a85efafc21650661d3be381a445a4409725e9447bf66acdc7ca093311
    16:57:01.558 [ForkJoinPool-1-worker-1] ERROR tc.gvenzl/oracle-xe:slim -- Could not start container
    java.lang.RuntimeException: com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.HttpHostConnectException: Connect to http://dockerdind:8076 [dockerdind/127.0.0.1] failed: Connection refused
    	at com.github.dockerjava.zerodep.ApacheDockerHttpClientImpl.execute(ApacheDockerHttpClientImpl.java:210)
    	at com.github.dockerjava.zerodep.ZerodepDockerHttpClient.execute(ZerodepDockerHttpClient.java:8)
    	at org.testcontainers.dockerclient.HeadersAddingDockerHttpClient.execute(HeadersAddingDockerHttpClient.java:23)
    	at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)
    	at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:202)
    	at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.get(DefaultInvocationBuilder.java:74)
    	at org.testcontainers.shaded.com.github.dockerjava.core.exec.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:31)
    	at org.testcontainers.shaded.com.github.dockerjava.core.exec.InspectContainerCmdExec.execute(InspectContainerCmdExec.java:13)
    	at org.testcontainers.shaded.com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)
    	at org.testcontainers.shaded.com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:33)
    	at org.testcontainers.shaded.com.github.dockerjava.core.command.InspectContainerCmdImpl.exec(InspectContainerCmdImpl.java:51)
    	at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:505)
    	at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:354)
    	at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
    	at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:344)
    	at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:330)
    	at <redacted>
    	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
    	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1155)
    	at java.base/jdk.internal.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:42)
    	at java.base/jdk.internal.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:185)
    	at java.base/java.lang.reflect.Field.acquireFieldAccessor(Field.java:1132)
    	at java.base/java.lang.reflect.Field.getFieldAccessor(Field.java:1113)
    	at java.base/java.lang.reflect.Field.get(Field.java:425)
    	at org.springframework.util.ReflectionUtils.getField(ReflectionUtils.java:672)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.getFieldValue(ServiceConnectionContextCustomizerFactory.java:95)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.createSource(ServiceConnectionContextCustomizerFactory.java:80)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.lambda$collectSources$0(ServiceConnectionContextCustomizerFactory.java:63)
    	at org.springframework.core.annotation.TypeMappedAnnotations$AggregatesSpliterator.tryAdvance(TypeMappedAnnotations.java:607)
    	at org.springframework.core.annotation.TypeMappedAnnotations$AggregatesSpliterator.tryAdvance(TypeMappedAnnotations.java:574)
    	at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:332)
    	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.lambda$collectSources$1(ServiceConnectionContextCustomizerFactory.java:63)
    	at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:691)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.collectSources(ServiceConnectionContextCustomizerFactory.java:60)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.collectSources(ServiceConnectionContextCustomizerFactory.java:71)
    	at org.springframework.boot.testcontainers.service.connection.ServiceConnectionContextCustomizerFactory.createContextCustomizer(ServiceConnectionContextCustomizerFactory.java:52)
    	at org.springframework.test.context.support.AbstractTestContextBootstrapper.getContextCustomizers(AbstractTestContextBootstrapper.java:360)
    	at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:332)
    	at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildDefaultMergedContextConfiguration(AbstractTestContextBootstrapper.java:267)
    	at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:215)
    	at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:108)
    	at org.springframework.boot.test.context.SpringBootTestContextBootstrapper.buildTestContext(SpringBootTestContextBootstrapper.java:111)
    	at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:142)
    	at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:126)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore.lambda$getOrComputeIfAbsent$5(NamespacedHierarchicalStore.java:147)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier.computeValue(NamespacedHierarchicalStore.java:372)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore$MemoizingSupplier.get(NamespacedHierarchicalStore.java:361)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore$StoredValue.evaluate(NamespacedHierarchicalStore.java:308)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore$StoredValue.access$200(NamespacedHierarchicalStore.java:287)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore.getOrComputeIfAbsent(NamespacedHierarchicalStore.java:149)
    	at org.junit.platform.engine.support.store.NamespacedHierarchicalStore.getOrComputeIfAbsent(NamespacedHierarchicalStore.java:168)
    	at org.junit.jupiter.engine.execution.NamespaceAwareStore.lambda$getOrComputeIfAbsent$3(NamespaceAwareStore.java:66)
    	at org.junit.jupiter.engine.execution.NamespaceAwareStore.accessStore(NamespaceAwareStore.java:90)
    	at org.junit.jupiter.engine.execution.NamespaceAwareStore.getOrComputeIfAbsent(NamespaceAwareStore.java:65)
    	at org.springframework.test.context.junit.jupiter.SpringExtension.getTestContextManager(SpringExtension.java:366)
    	at org.springframework.test.context.junit.jupiter.SpringExtension.beforeAll(SpringExtension.java:131)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$12(ClassBasedTestDescriptor.java:396)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:396)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:212)
    	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:85)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:202)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.executeNonConcurrentTasks(ForkJoinPoolHierarchicalTestExecutorService.java:172)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:152)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
    	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
    	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
    	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
    	at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:202)
    	at java.base/java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:194)
    	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Additional Information

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit DockerClientProviderStrategy und den Docker-Client-Aufrufen, die von GenericContainer.tryStart aus erreicht werden, insbesondere InspectContainerCmdExec, unter Verwendung der gemeldeten DOCKER_HOST=tcp://dockerdind:8076-Konfiguration und OracleContainer. Reproduziere den Oracle XE-Startfehler und verfolge, warum die spätere Anfrage http verwendet; als abgeschlossen gilt die Aufgabe, wenn OracleContainer erfolgreich startet, ohne die funktionierenden Ryuk- und Image-Pull-Operationen zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
docker, java
Bereich
databases, devops, testing
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.