Рубрики
Без рубрики

Java – jcmd не найден?

– – Java -cmd не найден?

jcmd доступен в JDK/bin , а не в JRE. Убедитесь, что установленная Java – это JDK, а не JRE.

Давайте рассмотрим следующий пример, попробуйте использовать cmd для включения регистратора полетов Java внутри контейнера docker.

1. Файл настройки

Простой файл Докера.

FROM adoptopenjdk/openjdk11:alpine-jre

ARG JAR_FILE=target/markdown.jar

WORKDIR /opt/app

COPY ${JAR_FILE} app.jar

ENTRYPOINT ["java","-jar","app.jar"]

2. Докер + cmd

Доступ к оболочке контейнера docker, попробуйте jcmd включить бортовой самописец Java, но его команда не найдена?

$ docker exec -it 3d1588519433 sh

/opt/app # jcmd
sh: jcmd: not found

/opt/app # which java
/opt/java/openjdk/bin/java

/opt/app # java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.7+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.7+10, mixed mode)
/opt/app #

Решение

Опять же, jcmd доступен в JDK/bin , а не в JRE. Файл Dockerfile использует openjdk 11:alpine-jre , образ JRE.

FROM adoptopenjdk/openjdk11:alpine-jre

Чтобы исправить это, попробуйте установить образ JDK.

FROM adoptopenjdk/openjdk11:alpine

Проверьте это еще раз.

$ docker exec -it  sh

/opt/app # jcmd

48 jdk.jcmd/sun.tools.jcmd.JCmd
1 app.jar

Сделано.

Рекомендации

  • ссылка на исполнителя docker
  • Как получить доступ к оболочке контейнера Docker?
  • Java 11 – Бортовой самописец Java
  • Примеры приложений Docker и Java

Оригинал: “https://mkyong.com/java/java-jcmd-not-found/”