{"record":{"id":"4101db1f97cf4bdf","repo":"GoogleContainerTools/jib","slug":"message-see-https-github-com-googlecontainer","errorCode":null,"errorMessage":"${message}; see https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#where-is-the-global-jib-configuration-file-and-how-i-can-configure-it to fix or you may need to delete ${configFile}","messagePattern":"(.+?); see https://github\\.com/GoogleContainerTools/jib/blob/master/docs/faq\\.md#where-is-the-global-jib-configuration-file-and-how-i-can-configure-it to fix or you may need to delete (.+?)","errorType":"validation","errorClass":"InvalidGlobalConfigException","httpStatus":null,"severity":"error","filePath":"jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/globalconfig/GlobalConfig.java","lineNumber":70,"sourceCode":"\n      // Generate config file if it doesn't exist\n      Files.createDirectories(configDir);\n      Path tempConfigFile = Files.createTempFile(configDir, CONFIG_FILENAME, null);\n      tempConfigFile.toFile().deleteOnExit();\n\n      GlobalConfigTemplate configJson = new GlobalConfigTemplate();\n      try (OutputStream outputStream = Files.newOutputStream(tempConfigFile)) {\n        JsonTemplateMapper.writeTo(configJson, outputStream);\n        Files.move(tempConfigFile, configFile);\n        return from(configJson);\n\n      } catch (FileAlreadyExistsException ex) {\n        // Perhaps created concurrently. Read again.\n        return readConfig(configDir);\n      }\n\n    } catch (InvalidGlobalConfigException ex) {\n      throw new InvalidGlobalConfigException(\n          ex.getMessage()\n              + \"; see https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#where-is-the-global-jib-configuration-file-and-how-i-can-configure-it \"\n              + \"to fix or you may need to delete \"\n              + configFile);\n\n    } catch (IOException ex) {\n      throw new IOException(\n          \"Failed to create, open, or parse global Jib config file; see \"\n              + \"https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#where-is-the-global-jib-configuration-file-and-how-i-can-configure-it \"\n              + \"to fix or you may need to delete \"\n              + configFile,\n          ex);\n    }\n  }\n\n  private static GlobalConfig from(GlobalConfigTemplate configJson)\n      throws InvalidGlobalConfigException {\n    ImmutableListMultimap.Builder<String, String> registryMirrors = ImmutableListMultimap.builder();","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/GoogleContainerTools/jib/blob/fb949e2676afbbd7dd7a1ef61e20251931325654/jib-plugins-common/src/main/java/com/google/cloud/tools/jib/plugins/common/globalconfig/GlobalConfig.java#L52-L88","documentation":"Jib wraps the message of an InvalidGlobalConfigException thrown while parsing the global Jib configuration file (~/.jib/jib-config.json), appending a link to the FAQ explaining where the file lives and how to fix it. It indicates the config file exists but its contents violate Jib's schema (e.g. a property has the wrong type or an invalid value). The message suggests fixing the file or deleting it to restore defaults.","triggerScenarios":"Thrown by GlobalConfig.readConfig when reading the global config file raises InvalidGlobalConfigException from the internal from() validation; the original message is preserved and the FAQ URL plus the config file path are appended. Any schema violation detected in from() (empty registry, empty mirrors list) or JSON binding failure mapped to InvalidGlobalConfigException triggers this.","commonSituations":"Users hand-edit ~/.jib/jib-config.json to add registry mirrors and get a property name or type wrong; files written by an older Jib version with a schema no longer accepted; malformed JSON partially parsed then rejected by validation.","solutions":["Open the config file path shown in the message and fix the invalid property per the linked FAQ","Validate each registryMirrors entry has non-empty 'registry' and non-empty 'mirrors' array","Delete the config file to fall back to defaults and re-create it carefully","If it was created concurrently by another build, simply re-run; readConfig retries once on FileAlreadyExistsException but an invalid concurrent write still surfaces this"],"exampleFix":"// before: ~/.jib/jib-config.json\n{ \"registryMirrors\": [ { \"registry\": \"\", \"mirrors\": [] } ] }\n// after\n{ \"registryMirrors\": [ { \"registry\": \"docker.io\", \"mirrors\": [\"mirror.gcr.io\"] } ] }","handlingStrategy":"validation","validationCode":"// Validate global jib config before building\nimport com.google.cloud.tools.jib.plugins.common.globalconfig.GlobalConfig;\njava.nio.file.Path dir = java.nio.file.Path.of(System.getProperty(\"user.home\"), \".jib\");\nif (java.nio.file.Files.exists(dir.resolve(\"jib-config.json\"))) {\n  try { GlobalConfig.readConfig(dir); } catch (Exception e) { throw new IllegalStateException(\"Fix or delete \" + dir.resolve(\"jib-config.json\"), e); }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Edit ~/.jib/jib-config.json against the documented schema in the Jib FAQ","Validate the JSON with a linter/schema checker before building","Keep a known-good copy of the config or generate it from a template"],"tags":["jib","config","schema-validation"],"backgroundTag":"invalid-config-value","analyzedSha":"fb949e2676afbbd7dd7a1ef61e20251931325654","analyzedAt":"2026-09-06T14:04:09.491Z","contentChangedAt":"2026-09-06T14:04:09.491Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}