Skip to content

Unable to fetch images from private registry with basic auth credentials #790

Closed

Description

@ricogini

If the ~/.docker/config.json contains the credentials for a private registry in a auth field like

{
	"auths": {
		"https://repo.example.com": {
			"auth": "dXNlcjpwYXNzd29yZA=="
		}
	}

testcontainers can't find the images from that repo. It works only with the username and password fields. Unfortunately the Jenkins Docker pipeline plugin step docker.withRegistry creates only the auth field.
The log output doesn't say anything that it can't find the credentials:

13:17:43.812 [Test worker] DEBUG org.testcontainers.utility.RegistryAuthLocator - RegistryAuthLocator has configFile: /home/jenkins/workspace/ce_create_image_with_gradle-RIQFZKZVR6M2QF6BHIRDD7TVE3W3V6ROKSEKSZG7WJP734PLRHUA@tmp/398ec06f-d85c-4bef-8146-e2f5880f6a35/config.json (exists) and commandPathPrefix: 
    13:17:43.881 [testcontainers-netty-1-2] DEBUG com.github.dockerjava.core.command.PullImageResultCallback - PullResponseItem[stream=<null>,status=Pulling repository hub.i.gini.net/gini/rabbitmq_testing,progressDetail=<null>,progress=<null>,id=<null>,from=<null>,time=<null>,errorDetail=<null>,error=<null>,aux=<null>]
    13:17:43.886 [testcontainers-netty-1-2] DEBUG com.github.dockerjava.core.command.PullImageResultCallback - PullResponseItem[stream=<null>,status=<null>,progressDetail=<null>,progress=<null>,id=<null>,from=<null>,time=<null>,errorDetail=ResponseItem.ErrorDetail[code=<null>,message=Error: image gini/rabbitmq_testing:3.7.7 not found],error=Error: image gini/rabbitmq_testing:3.7.7 not found,aux=<null>]

Activity

  1. yellowstonesoftware commented on Aug 1, 2018

    @yellowstonesoftware

    bit disheartening that there has been no feedback here yet :( this puts me/us between a rock and a hard place, going to create a separate issue for that

  2. stale commented on Oct 30, 2018

    @stale

    This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you believe this is a mistake, please reply to this comment to keep it open. If there isn't one already, a PR to fix or at least reproduce the problem in a test case will always help us get back on track to tackle this.

  3. rnorth commented on Oct 31, 2018

    @rnorth
    Member

    Sorry, I have no idea how this ticket received no comments at all, despite being worked on.

    I think, as part of the work for #820 that was released in 1.9.0, this should be resolved. I'll close the ticket; please reopen if this is still an issue.

  4. TorinoSM commented on Mar 6, 2023

    @TorinoSM

    The same trouble

    private val appImageFuture: Future<String> = ImageFromDockerfile()
        .withDockerfile(Path.of(File("Dockerfile").absolutePath))
    return KGenericContainer(appImageFuture)
        .withEnv(envs)
        .withExposedPorts(port)
        .withLogConsumer { outputFrame ->
            if (outputFrame.bytes != null) {
                print(String(outputFrame.bytes))
            }
        }

    Dockerfile

    FROM private_repo/openjdk:11
    

    Error

    
    Container startup failed
    org.testcontainers.containers.ContainerLaunchException: Container startup failed
    	at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:330)
    	at app//org.testcontainers.containers.GenericContainer.start(GenericContainer.java:311)
    	at app//org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.start(TestcontainersExtension.java:242)
    	at app//org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.access$200(TestcontainersExtension.java:229)
    	at app//org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$null$1(TestcontainersExtension.java:59)
    	at app//org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$getOrComputeIfAbsent$4(ExtensionValuesStore.java:86)
    	at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$MemoizingSupplier.get(ExtensionValuesStore.java:205)
    	at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.evaluate(ExtensionValuesStore.java:182)
    	at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.access$100(ExtensionValuesStore.java:171)
    	at app//org.junit.jupiter.engine.execution.ExtensionValuesStore.getOrComputeIfAbsent(ExtensionValuesStore.java:89)
    	at app//org.junit.jupiter.engine.execution.NamespaceAwareStore.getOrComputeIfAbsent(NamespaceAwareStore.java:53)
    	at app//org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$beforeAll$2(TestcontainersExtension.java:59)
    	at java.base@17.0.5/java.util.ArrayList.forEach(ArrayList.java:1511)
    	at app//org.testcontainers.junit.jupiter.TestcontainersExtension.beforeAll(TestcontainersExtension.java:59)
    	at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$8(ClassBasedTestDescriptor.java:368)
    	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:368)
    	at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:192)
    	at app//org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:78)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:136)
    	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at java.base@17.0.5/java.util.ArrayList.forEach(ArrayList.java:1511)
    	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
    	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
    	at app//org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
    	at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
    	at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
    	at app//org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
    	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
    	at app//org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:108)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:88)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:54)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:67)
    	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:52)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:96)
    	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:75)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
    	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
    	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
    	at java.base@17.0.5/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at java.base@17.0.5/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    	at java.base@17.0.5/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base@17.0.5/java.lang.reflect.Method.invoke(Method.java:568)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
    	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
    	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
    	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
    	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
    	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
    	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
    	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
    	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
    	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
    	at app//worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
    	Suppressed: org.testcontainers.containers.ContainerLaunchException: Container startup failed
    		at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:330)
    		at app//org.testcontainers.containers.GenericContainer.start(GenericContainer.java:311)
    		at app//org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.start(TestcontainersExtension.java:242)
    		at app//org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.access$200(TestcontainersExtension.java:229)
    		at app//org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$null$1(TestcontainersExtension.java:59)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$getOrComputeIfAbsent$4(ExtensionValuesStore.java:86)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$MemoizingSupplier.get(ExtensionValuesStore.java:205)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.evaluate(ExtensionValuesStore.java:182)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore$StoredValue.access$100(ExtensionValuesStore.java:171)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore.lambda$closeAllStoredCloseableValues$1(ExtensionValuesStore.java:65)
    		at java.base@17.0.5/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
    		at java.base@17.0.5/java.util.concurrent.ConcurrentHashMap$ValueSpliterator.forEachRemaining(ConcurrentHashMap.java:3612)
    		at java.base@17.0.5/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    		at java.base@17.0.5/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    		at java.base@17.0.5/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
    		at java.base@17.0.5/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
    		at java.base@17.0.5/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    		at java.base@17.0.5/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
    		at app//org.junit.jupiter.engine.execution.ExtensionValuesStore.closeAllStoredCloseableValues(ExtensionValuesStore.java:68)
    		at app//org.junit.jupiter.engine.descriptor.AbstractExtensionContext.close(AbstractExtensionContext.java:74)
    		at app//org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.close(JupiterEngineExecutionContext.java:53)
    		at app//org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.cleanUp(JupiterTestDescriptor.java:222)
    		at app//org.junit.jupiter.engine.descriptor.JupiterTestDescriptor.cleanUp(JupiterTestDescriptor.java:57)
    		at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$cleanUp$9(NodeTestTask.java:155)
    		at app//org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
    		at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.cleanUp(NodeTestTask.java:155)
    		at app//org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:87)
    		... 42 more
    	Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=<resolving>, imagePullPolicy=DefaultPullPolicy())
    		at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1286)
    		at app//org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:615)
    		at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
    		... 68 more
    	Caused by: com.github.dockerjava.api.exception.DockerClientException: Could not build image: Head "private_repo/openjdk/manifests/11": no basic auth credentials
    		at app//com.github.dockerjava.api.command.BuildImageResultCallback.getImageId(BuildImageResultCallback.java:78)
    		at app//com.github.dockerjava.api.command.BuildImageResultCallback.awaitImageId(BuildImageResultCallback.java:50)
    		at app//org.testcontainers.images.builder.ImageFromDockerfile.resolve(ImageFromDockerfile.java:141)
    		at app//org.testcontainers.images.builder.ImageFromDockerfile.resolve(ImageFromDockerfile.java:37)
    		at app//org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:17)
    		at app//org.testcontainers.utility.LazyFuture.get(LazyFuture.java:39)
    		at app//org.testcontainers.shaded.com.google.common.util.concurrent.Futures$3.get(Futures.java:1332)
    		at app//org.testcontainers.images.RemoteDockerImage.getImageName(RemoteDockerImage.java:104)
    		at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:63)
    		at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:27)
    		at app//org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:17)
    		at app//org.testcontainers.utility.LazyFuture.get(LazyFuture.java:39)
    		at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1284)
    		... 70 more
    Caused by: org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=<resolving>, imagePullPolicy=DefaultPullPolicy())
    	at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1286)
    	at app//org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:615)
    	at app//org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
    	... 68 more
    Caused by: com.github.dockerjava.api.exception.DockerClientException: Could not build image: Head "private_repo/openjdk/manifests/11": no basic auth credentials
    	at app//com.github.dockerjava.api.command.BuildImageResultCallback.getImageId(BuildImageResultCallback.java:78)
    	at app//com.github.dockerjava.api.command.BuildImageResultCallback.awaitImageId(BuildImageResultCallback.java:50)
    	at app//org.testcontainers.images.builder.ImageFromDockerfile.resolve(ImageFromDockerfile.java:141)
    	at app//org.testcontainers.images.builder.ImageFromDockerfile.resolve(ImageFromDockerfile.java:37)
    	at app//org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:17)
    	at app//org.testcontainers.utility.LazyFuture.get(LazyFuture.java:39)
    	at app//org.testcontainers.shaded.com.google.common.util.concurrent.Futures$3.get(Futures.java:1332)
    	at app//org.testcontainers.images.RemoteDockerImage.getImageName(RemoteDockerImage.java:104)
    	at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:63)
    	at app//org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:27)
    	at app//org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:17)
    	at app//org.testcontainers.utility.LazyFuture.get(LazyFuture.java:39)
    	at app//org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1284)
    	... 70 more
    
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions