ошибка при передаче аргумента jvm из файла Docker - PullRequest
1 голос
/ 28 апреля 2019

Это мой Dockefile:

# Start with a base image containing Java runtime
FROM openjdk:8-jdk-alpine

# Add a volume pointing to /tmp
VOLUME /tmp

# Make port 8080 available to the world outside this container
EXPOSE 8080

# The application's jar file
COPY Server_Changes/glowroot  /tmp 
ARG JAR_FILE=target/websocket-demo-0.0.1-SNAPSHOT.jar
ARG OK=/tmp/glowroot.jar

# Add the application's jar to the container
ADD ${JAR_FILE} websocket-demo.jar

# Run the jar file 
ENTRYPOINT ["java", " -javaagent:/glowroot.jar" , "- Dglowroot.agent.id=Docker "," -jar /websocket-demo.jar"]

При создании образа я получаю следующую ошибку:

Не удалось найти или загрузить основной класс-javaagent: .glowroot.баночка

Может кто-нибудь объяснить, почему?

1 Ответ

0 голосов
/ 28 апреля 2019

Когда вы используете JSON-подобный синтаксис в командах RUN, ENTRYPOINT и CMD, пробелы внутри кавычек имеют значение. В частности, когда вы говорите

ENTRYPOINT ["java", " -javaagent:/glowroot.jar" , ...]
#                    ^

Пробел является частью опции; и поскольку опция не начинается с -, Java интерпретирует его как имя класса. Это в основном верно для всех ваших вариантов. В последнем варианте -jar и имя класса являются двумя отдельными параметрами и должны быть в двух отдельных «словах».

(рассмотрите возможность изменения ENTRYPOINT на CMD, чтобы упростить отладку изображения, и удаление объявления VOLUME; это вызовет только неожиданные нечетные побочные эффекты.)

CMD ["java", "-javaagent:/glowroot.jar",
     "-Dglowroot.agent.id=Docker",
     "-jar", "/websocket-demo.jar"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...