Google Jib выбрасывает UnknownManifestFormatException: Unknown mediaType: application/vnd.oci.image.index.v1+json при сборке приложения.

Вопрос или проблема

Docker: 27.1.2
Java: 17.0.11
Maven: 3.8.6
Jib: 3.2.1
OS: Ubuntu 22.04.4

Я использую приложение Jhipster Spring. До сих пор мое приложение собиралось и работало без каких-либо проблем. Но вдруг сегодня, ничего не изменив, когда я попробовал собрать свое приложение, я получил следующую ошибку:

./mvnw -ntp verify -DskipTests -Pprod jib:dockerBuild

[ERROR] Не удалось выполнить цель com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) в проекте remember: Неизвестный mediaType: application/vnd.oci.image.index.v1+json -> [Help 1]

[ERROR] Не удалось выполнить цель com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) в проекте remember: Неизвестный mediaType: application/vnd.oci.image.index.v1+json -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Не удалось выполнить цель com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) в проекте remember: Неизвестный mediaType: application/vnd.oci.image.index.v1+json
    в org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:375)
    в org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
    в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    в org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    в org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    в org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    в org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    в org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    в jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    в java.lang.reflect.Method.invoke (Method.java:568)
    в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    в org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    в jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    в java.lang.reflect.Method.invoke (Method.java:568)
    в org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:53)
    в org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:152)
    в org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:76)
Причина: org.apache.maven.plugin.MojoExecutionException: Неизвестный mediaType: application/vnd.oci.image.index.v1+json
    в com.google.cloud.tools.jib.maven.BuildDockerMojo.execute (BuildDockerMojo.java:167)
    в org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    в org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:370)
    в org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:351)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:171)
    в org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:163)
    в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    в org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    в org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    в org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:294)
    в org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    в org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    в org.apache.maven.cli.MavenCli.execute (MavenCli.java:960)
    в org.apache.maven.cli.MavenCli.doMain (MavenCli.java:293)
    в org.apache.maven.cli.MavenCli.main (MavenCli.java:196)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    в jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    в java.lang.reflect.Method.invoke (Method.java:568)
    в org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    в org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    в org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    в org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    в jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
    в jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    в java.lang.reflect.Method.invoke (Method.java:568)
    в org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:53)
    в org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:152)
    в org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:76)
Причина: com.google.cloud.tools.jib.image.json.UnknownManifestFormatException: Неизвестный mediaType: application/vnd.oci.image.index.v1+json
    в com.google.cloud.tools.jib.registry.AbstractManifestPuller.getManifestTemplateFromJson (AbstractManifestPuller.java:177)
    в com.google.cloud.tools.jib.registry.AbstractManifestPuller.handleResponse (AbstractManifestPuller.java:98)
    в com.google.cloud.tools.jib.registry.RegistryEndpointCaller.call (RegistryEndpointCaller.java:140)
    в com.google.cloud.tools.jib.registry.RegistryEndpointCaller.call (RegistryEndpointCaller.java:114)
    в com.google.cloud.tools.jib.registry.RegistryClient.callRegistryEndpoint (RegistryClient.java:623)
    в com.google.cloud.tools.jib.registry.RegistryClient.pullManifest (RegistryClient.java:434)
    в com.google.cloud.tools.jib.registry.RegistryClient.pullManifest (RegistryClient.java:439)
    в com.google.cloud.tools.jib.builder.steps.PullBaseImageStep.pullBaseImages (PullBaseImageStep.java:292)
    в com.google.cloud.tools.jib.builder.steps.PullBaseImageStep.call (PullBaseImageStep.java:179)
    в com.google.cloud.tools.jib.builder.steps.PullBaseImageStep.call (PullBaseImageStep.java:69)
    в com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly (TrustedListenableFutureTask.java:131)
    в com.google.common.util.concurrent.InterruptibleTask.run (InterruptibleTask.java:74)
    в com.google.common.util.concurrent.TrustedListenableFutureTask.run (TrustedListenableFutureTask.java:82)
    в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1136)
    в java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:635)
    в java.lang.Thread.run (Thread.java:842)

Я попробовал удалить все ненужное из docker с помощью

docker system prune

И удалить директорию target и заново собрать приложение с помощью maven.

Но ничего не помогает мне.

Ответ или решение

Причина возникновения ошибки UnknownManifestFormatException в Jib при сборке приложения

Описание проблемы

При сборке вашего приложения, использующего Jib, вы столкнулись с ошибкой:

[ERROR] Failed to execute goal com.google.cloud.tools:jib-maven-plugin:3.2.1:dockerBuild (default-cli) on project remember: Unknown mediaType: application/vnd.oci.image.index.v1+json

Эта ошибка указывает на то, что Jib не может распознать формат манифеста входного изображение Docker, что приводит к сбою сборки.

Анализ ситуации

Вы используете следующие версии инструментов:

  • Docker: 27.1.2
  • Java: 17.0.11
  • Maven: 3.8.6
  • Jib: 3.2.1
  • Операционная система: Ubuntu 22.04.4

Изменения в версии Docker или обновление Jib могут повлиять на функциональность, так как Jib требует совместимости с различными форматами манифестов Docker, включая OCI (Open Container Initiative).

Причины возникновения ошибки

  1. Несоответствие версии: Версия Docker, которую вы используете, возможно, создала изображение, совместимое с форматом OCI, который не поддерживается Jib версии 3.2.1.

  2. Кеширование: Если предыдущие сборки изображений или манифесты были закэшированы в системе, это может привести к конфликту при определении типа манифеста.

  3. Обновления Jib или Docker: Ваши инструменты могли обновиться (например, автоматические обновления), что также может быть причиной изменения совместимости.

Решения

  1. Проверка версий компонентов:
    Убедитесь, что используемая версия Jib поддерживает форматы, предоставляемые вашей версией Docker. Вы можете рассмотреть возможность обновления Jib до последней стабильной версии, где эта проблема могла быть исправлена.

  2. Очистка кеша Docker:
    Запустите команды:

    docker system prune -a

    Это удалит все неиспользуемые изображения, контейнеры и réseaux, что может помочь устранить конфликт с закэшированными манифестами.

  3. Смена формата:
    Если вы используете базовое изображение, измените его на то, которое точно поддерживается Jib. Например, вы можете попробовать использовать изображения, основанные на Docker, а не на OCI.

  4. Проверка совместимости:
    Убедитесь, что вы используете совместимые образы. Например, можете временно переключиться на стандартные образы из Docker Hub, которые точно известны своей совместимостью с Jib.

  5. Обновление Jib:
    Если ваше текущее окружение позволяет, рекомендуется обновить Jib до последней версии (например, до 3.2.2 или выше, если доступно) через ваш pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>jib-maven-plugin</artifactId>
       <version>3.2.2</version>
    </plugin>
  6. Документация Jib:
    Ознакомьтесь с документацией Jib на их официальном сайте для получения информации о совместимости версий и детальном описании использования плагина.

Заключение

Эта проблема, связанная с UnknownManifestFormatException, может показаться сложной, но с правильным анализом причин и подготовкой стратегии решения вы сможете быстро ее устранить. Убедитесь, что все используемые вами инструменты совместимы друг с другом, очистите кеш и, при необходимости, обновляйте компоненты. Все эти действия помогут вам вернуть ваше приложение в рабочее состояние.

Оцените материал
Добавить комментарий

Капча загружается...