GoogleContainerTools/jib · warning

Caused by: ${causeMessage}

Error message

  Caused by: ${causeMessage}

What it means

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).

Source

Thrown at jib-core/src/main/java/com/google/cloud/tools/jib/registry/credentials/DockerConfigCredentialRetriever.java:138

    for (String registryAlias : RegistryAliasGroup.getAliasesGroup(registry)) {
      // First, find a credential helper from "credentialHelpers" and "credsStore" in order.
      DockerCredentialHelper dockerCredentialHelper =
          dockerConfig.getCredentialHelperFor(registryAlias);
      if (dockerCredentialHelper != null) {
        try {
          Path helperPath = dockerCredentialHelper.getCredentialHelper();
          logger.accept(LogEvent.info("trying " + helperPath + " for " + registryAlias));
          // Tries with the given registry alias (may be the original registry).
          return Optional.of(dockerCredentialHelper.retrieve());

        } catch (IOException
            | CredentialHelperUnhandledServerUrlException
            | CredentialHelperNotFoundException ex) {
          // Warns the user that the specified credential helper cannot be used.
          if (ex.getMessage() != null) {
            logger.accept(LogEvent.warn(ex.getMessage()));
            if (ex.getCause() != null && ex.getCause().getMessage() != null) {
              logger.accept(LogEvent.warn("  Caused by: " + ex.getCause().getMessage()));
            }
          }
        }
      }

      // Lastly, find defined auth.
      AuthTemplate auth = dockerConfig.getAuthFor(registryAlias);
      if (auth != null) {
        if (auth.getAuth() != null) {
          // 'auth' is a basic authentication token that should be parsed back into credentials
          String usernameColonPassword =
              new String(Base64.getDecoder().decode(auth.getAuth()), StandardCharsets.UTF_8);
          String username = usernameColonPassword.substring(0, usernameColonPassword.indexOf(":"));
          String password = usernameColonPassword.substring(usernameColonPassword.indexOf(":") + 1);
          logger.accept(
              LogEvent.info(
                  "Docker config auths section defines credentials for " + registryAlias));
          if (auth.getIdentityToken() != null

View on GitHub (pinned to fb949e2676)

Solutions

  1. Install or repair the credential helper referenced in ~/.docker/config.json and ensure it is on PATH
  2. Remove the stale credsStore/credHelpers entry from ~/.docker/config.json so Jib falls back to auth or anonymous access
  3. Run the helper manually (echo <registry> | docker-credential-<helper> get) to see its raw error
  4. Provide credentials via Jib's own auth configuration or system properties instead of relying on the helper

Example fix

// before: ~/.docker/config.json referencing removed helper
{ "credsStore": "desktop" }
// after: drop the broken helper entry
{ }
mvn jib:build
Defensive patterns

Strategy: fallback

Validate before calling

// verify the configured credential helper works before building
echo "registry.example.com" | docker-credential-$(jq -r .credsStore ~/.docker/config.json) get >/dev/null \
  || echo "credential helper broken: fix ~/.docker/config.json"

Try / catch

try {
  cred = retriever.retrieve();
} catch (CredentialHelperUnhandledServerUrlException | CredentialHelperNotFoundException e) {
  // Jib already warned (incl. 'Caused by'); fall back to auth config or anonymous pull
  cred = fallbackCredentialOrAnonymous();
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of GoogleContainerTools/jib@fb949e2676 (2026-09-06). Data as JSON: /api/errors/45fed07be3cc28bd. Report an issue: GitHub.