Переменные среды не расширяются в JAVA_TOOL_OPTIONS - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь интегрировать javaagent для мониторинга приложений. Я использую докер и настроил базовый образ OpenJDK, который наследуется другими образами приложений.

Поскольку javaagent требует путь к файлу jar, в целях обслуживания я определил путь в базовом образе как другую переменную env (AGENT_PATH), и я хочу повторно использовать одну и ту же переменную env во всех изображениях моего приложения. По какой-то причине переменная среды не выбрана, и контейнер приложения завершается с ошибкой.

Dockerfile базового изображения

AGENT_PATH=/agent/agent.jar

Вот как я настроил JAVA_TOOL_OPTIONS в Dockerfile приложения.

JAVA_TOOL_OPTIONS="-javaagent:$AGENT_PATH + other JVM options"

Это сообщение об ошибке

Picked up JAVA_TOOL_OPTIONS: -javaagent:$AGENT_PATH
Error opening zip file or JAR manifest missing : $AGENT_PATH
Error occurred during initialization of VM
agent library failed to init: instrument

Почему AGENT_PATH не подставляется должным образом?

Я ознакомился с реализацией Hotspot для понимания. Я нашел это .

Ответы [ 2 ]

0 голосов
/ 16 января 2019

В dockerfiles все директивы требуют определенного кодового слова. Назначение переменной окружения ничем не отличается от этого и требует кодового слова ENV (читается здесь ).

Используя это, вы должны получить отрывок из вашего dockerfile

ENV AGENT_PATH=/agent/agent.jar
0 голосов
/ 16 января 2019

Это будет зависеть от шага Docker. Если вы используете RUN step, обработка переменных не поддерживается:

В отличие от формы оболочки, форма exec не вызывает командную оболочку. Это означает, что обычная обработка оболочки не происходит. Например, RUN [ "echo", "$HOME" ] не будет выполнять подстановку переменных на $HOME. Если вы хотите обработать оболочку, то либо используйте форму оболочки, либо выполните оболочку напрямую, например: RUN [ "sh", "-c", "echo $HOME" ]. При использовании формы exec и непосредственном выполнении оболочки, как в случае с формой оболочки, именно оболочка выполняет расширение переменной среды, а не docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...