JAVA_TOOL_OPTIONS中的环境变量未扩展

时间:2019-01-16 15:25:18

标签: java docker

我正在尝试集成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

2 个答案:

答案 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