{"record":{"id":"45fed07be3cc28bd","repo":"GoogleContainerTools/jib","slug":"caused-by-causemessage","errorCode":null,"errorMessage":"  Caused by: ${causeMessage}","messagePattern":"  Caused by: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"jib-core/src/main/java/com/google/cloud/tools/jib/registry/credentials/DockerConfigCredentialRetriever.java","lineNumber":138,"sourceCode":"    for (String registryAlias : RegistryAliasGroup.getAliasesGroup(registry)) {\n      // First, find a credential helper from \"credentialHelpers\" and \"credsStore\" in order.\n      DockerCredentialHelper dockerCredentialHelper =\n          dockerConfig.getCredentialHelperFor(registryAlias);\n      if (dockerCredentialHelper != null) {\n        try {\n          Path helperPath = dockerCredentialHelper.getCredentialHelper();\n          logger.accept(LogEvent.info(\"trying \" + helperPath + \" for \" + registryAlias));\n          // Tries with the given registry alias (may be the original registry).\n          return Optional.of(dockerCredentialHelper.retrieve());\n\n        } catch (IOException\n            | CredentialHelperUnhandledServerUrlException\n            | CredentialHelperNotFoundException ex) {\n          // Warns the user that the specified credential helper cannot be used.\n          if (ex.getMessage() != null) {\n            logger.accept(LogEvent.warn(ex.getMessage()));\n            if (ex.getCause() != null && ex.getCause().getMessage() != null) {\n              logger.accept(LogEvent.warn(\"  Caused by: \" + ex.getCause().getMessage()));\n            }\n          }\n        }\n      }\n\n      // Lastly, find defined auth.\n      AuthTemplate auth = dockerConfig.getAuthFor(registryAlias);\n      if (auth != null) {\n        if (auth.getAuth() != null) {\n          // 'auth' is a basic authentication token that should be parsed back into credentials\n          String usernameColonPassword =\n              new String(Base64.getDecoder().decode(auth.getAuth()), StandardCharsets.UTF_8);\n          String username = usernameColonPassword.substring(0, usernameColonPassword.indexOf(\":\"));\n          String password = usernameColonPassword.substring(usernameColonPassword.indexOf(\":\") + 1);\n          logger.accept(\n              LogEvent.info(\n                  \"Docker config auths section defines credentials for \" + registryAlias));\n          if (auth.getIdentityToken() != null","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/GoogleContainerTools/jib/blob/fb949e2676afbbd7dd7a1ef61e20251931325654/jib-core/src/main/java/com/google/cloud/tools/jib/registry/credentials/DockerConfigCredentialRetriever.java#L120-L156","documentation":"DockerConfigCredentialRetriever logs this warning when a configured Docker credential helper fails while retrieving credentials, and additionally logs the helper's underlying cause message prefixed with '  Caused by:'. It tells you which helper failed and why (e.g. helper binary crashed or rejected the server URL).","triggerScenarios":"A Docker config (~/.docker/config.json) with a credsStore or per-registry credHelpers entry causes a credential helper invocation that throws CredentialHelperUnhandledServerUrlException, CredentialHelperUnhandledServerUrlException's siblings, or CredentialHelperNotFoundException with a non-null message and non-null cause while retrieve() walks helper -> store -> auth fallbacks.","commonSituations":"docker-credential-desktop / docker-credential-gcloud not installed or not on PATH; helper that doesn't recognize the registry URL; stale credsStore after uninstalling Docker Desktop; mismatched helper versions.","solutions":["Install or repair the credential helper referenced in ~/.docker/config.json and ensure it is on PATH","Remove the stale credsStore/credHelpers entry from ~/.docker/config.json so Jib falls back to auth or anonymous access","Run the helper manually (echo <registry> | docker-credential-<helper> get) to see its raw error","Provide credentials via Jib's own auth configuration or system properties instead of relying on the helper"],"exampleFix":"// before: ~/.docker/config.json referencing removed helper\n{ \"credsStore\": \"desktop\" }\n// after: drop the broken helper entry\n{ }\nmvn jib:build","handlingStrategy":"fallback","validationCode":"// verify the configured credential helper works before building\necho \"registry.example.com\" | docker-credential-$(jq -r .credsStore ~/.docker/config.json) get >/dev/null \\\n  || echo \"credential helper broken: fix ~/.docker/config.json\"","typeGuard":null,"tryCatchPattern":"try {\n  cred = retriever.retrieve();\n} catch (CredentialHelperUnhandledServerUrlException | CredentialHelperNotFoundException e) {\n  // Jib already warned (incl. 'Caused by'); fall back to auth config or anonymous pull\n  cred = fallbackCredentialOrAnonymous();\n}","preventionTips":["Keep docker-credential-* helpers installed and on PATH","Prune stale credsStore entries after uninstalling Docker Desktop","Test helpers manually with `echo <registry> | docker-credential-<helper> get`"],"tags":["docker","credentials","credential-helper","jib"],"backgroundTag":"missing-credentials","analyzedSha":"fb949e2676afbbd7dd7a1ef61e20251931325654","analyzedAt":"2026-09-06T14:04:09.491Z","contentChangedAt":"2026-09-06T14:04:09.491Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}