我正在尝试集成javaagent进行应用程序监视。我正在使用docker,并且已经设置了由其他应用程序图像继承的OpenJDK基本图像。
由于javaagent需要jar文件的路径,出于维护目的,我已将基本映像中的路径定义为另一个env变量(AGENT_PATH
),并且我想在所有应用程序中重用相同的env变量图片。由于某种原因,未选择环境变量,并且应用程序容器退出并出现错误。
基本映像的Dockerfile
AGENT_PATH=/agent/agent.jar
这就是我在应用程序的Dockerfile中配置JAVA_TOOL_OPTIONS
的方式。
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的实现方法。我找到了this。
答案 0 :(得分:0)
这将取决于Docker步骤。如果您使用RUN
步骤,则不支持变量处理:
与shell表单不同,exec表单不会调用命令shell。这意味着正常的外壳处理不会发生。例如,
RUN [ "echo", "$HOME" ]
将不会对$HOME
进行变量替换。如果要进行shell处理,则可以使用shell形式或直接执行shell,例如:RUN [ "sh", "-c", "echo $HOME" ]
。在使用exec表单并直接执行shell时(例如在shell表单中),是由shell进行环境变量扩展,而不是docker。
答案 1 :(得分:0)
在dockerfiles中,所有指令都需要特定的代码字。分配环境变量与此没有什么不同,并且需要ENV
码字(读为here)。
使用此代码,您的dockerfile的摘录应为
ENV AGENT_PATH=/agent/agent.jar