Контейнер Docker не может запустить агент jacoco с Java 12 - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь запустить образ java docker с моим приложением весенней загрузки.Я хочу использовать его для тестирования API, а также собирать покрытие кода.Однако я не могу заставить jacocoagent работать внутри контейнера докера.Я делаю что-то неправильно?Я что-то пропустил?Обычный bootJar работает без проблем, когда я не добавляю агента.Более того, я могу без проблем выполнить ту же команду вне docker env.Так что, похоже, это не ошибка Java.

Вот мой файл docker-compose:

version: '3.7'
services:
  bootJarTestApi:
    image: openjdk:12.0.1-jdk-oracle
    environment:
      - "JAVA_TOOL_OPTIONS=-javaagent:/jacoco-agent/jacocoagent.jar=destfile=/jacoco-report/apiDockerTest.exec,output=file"
    ports:
      - 2020:2020
      - 2021:2021
    volumes:
      - "./build/libs/bootJar.jar:/bootJar.jar"
      - "./build/libs/jacoco-agent/jacocoagent.jar:/jacoco-agent/jacocoagent.jar"
      - "./build/jacoco/:/jacoco-report/"
    entrypoint: ["java", "-jar",
#                 "-javaagent:/jacoco-agent/jacocoagent.jar=destfile=/jacoco-report/apiDockerTest.exec,output=file",
                 "-Dspring.profiles.active=dev",
                 "/bootJar.jar"]

Когда я пытаюсь его запустить, docker говорит:

bootJarTestApi_1  | Picked up JAVA_TOOL_OPTIONS: -javaagent:/jacoco-agent/jacocoagent.jar=destfile=/jacoco-report/apiDockerTest.exec,output=file
bootJarTestApi_1  | FATAL ERROR in native method: processing of -javaagent failed
bootJarTestApi_1  | mmap failed for CEN and END part of zip file
bootJarTestApi_1  | Unexpected error (103) returned by AddToSystemClassLoaderSearch
bootJarTestApi_1  | Unable to add /jacoco-agent/jacocoagent.jar to system class path - the system class loader does not define the appendToClassPathForInstrumentation method or the method failed
bootJarTestApi_1  | #
bootJarTestApi_1  | # A fatal error has been detected by the Java Runtime Environment:
bootJarTestApi_1  | #
bootJarTestApi_1  | #  SIGSEGV (0xb) at pc=0x00007f85d2728b07, pid=1, tid=7
bootJarTestApi_1  | #
bootJarTestApi_1  | # JRE version: OpenJDK Runtime Environment (12.0.1+12) (build 12.0.1+12)
bootJarTestApi_1  | # Java VM: OpenJDK 64-Bit Server VM (12.0.1+12, mixed mode, sharing, tiered, compressed oops, g1 gc, linux-amd64)
bootJarTestApi_1  | # Problematic frame:
bootJarTestApi_1  | # C  [libc.so.6+0x37b07]  abort+0x297
bootJarTestApi_1  | #
bootJarTestApi_1  | # Core dump will be written. Default location: Core dumps may be processed with "/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h %e" (or dumping to //core.1)
bootJarTestApi_1  | #
bootJarTestApi_1  | # An error report file with more information is saved as:
bootJarTestApi_1  | # //hs_err_pid1.log
bootJarTestApi_1  | #
bootJarTestApi_1  | # If you would like to submit a bug report, please visit:
bootJarTestApi_1  | #   http://bugreport.java.com/bugreport/crash.jsp
bootJarTestApi_1  | #
bootJarTestApi_1  | 
bootJarTestApi_1  | [error occurred during error reporting (), id 0xb, SIGSEGV (0xb) at pc=0x00007f85d2728b07]

1 Ответ

1 голос
/ 13 мая 2019

Похоже, ключевая строка в сообщении об ошибке:

mmap failed for CEN and END part of zip file

Поиск этой строки в Google показывает, что она всегда связана с доступом к файловой системе, номожет быть вызвано многими причинами - от неправильной конфигурации ОС до странного поведения некоторых файловых систем и ошибок в JVM.И поэтому я думаю, что это не связано с конкретным агентом, то есть не связано с агентом JaCoCo, и вы должны иметь возможность воспроизвести то же самое с любым другим агентом.

Вы можете попробовать

  • использовать том не для файла агента, а для каталога;
  • чтобы вообще не использовать том для агента и поместить его непосредственно в образ.
...