【问题标题】:Failed to find Premain-Class manifest attribute for java agent找不到 Java 代理的 Premain-Class 清单属性
【发布时间】:2020-12-11 09:46:37
【问题描述】:

我正在尝试运行 java 代理。我创建容器的 docker 文件:

FROM ${my_repository}/open-jdk:1.8.0.262.b10-el_8-2020.09.15-1

ENV AGENT_HOME=/usr/local/agent
ENV AGENT_CONF="$AGENT_HOME/conf"

COPY jmx_javaagent.jar $AGENT_HOME

WORKDIR $DOMAIN_ROOT

ENTRYPOINT ["./start.sh"]
CMD []

并且启动脚本将jmx参数添加到jvm参数中。作为脚本中的摘要:

...
java -javaagent:${AGENT_HOME}/jmx_javaagent.jar=${AGENT_PORT}:${AGENT_CONF}/config.yaml \
         -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=${JMX_REMOTE_PORT} \
      

当我在 kubernetes 上运行映像时,我得到:

Failed to find Premain-Class manifest attribute in /usr/local/agent/jmx_javaagent.jar

那么这里有什么问题呢?

【问题讨论】:

  • 我正在使用prometheus代理,所以我只有jar文件。我没有 Manifest.MD
  • 在没有 docker 和 kubernetes 的情况下是否可以工作? (又名本地)
  • 我发现,当我反编译 jar 时,manifest.mf 中没有属性“Premain-Class”。取而代之的是 Main-Class 属性。所以这应该是问题所在。但我不知道如何解决这个问题。
  • java -javaagent:./jmx_prometheus_javaagent-0.14.0.jar=8080:config.yaml -jar yourJar.jar 这不行吗?

标签: java docker kubernetes javaagents


【解决方案1】:

我通过使用不同的版本解决了这个问题。在我使用的版本中,我分解了 jar 文件,发现没有 Premain-Class 属性。所以我将版本更改为具有此属性的版本并且它有效。

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2013-11-06
    • 2013-06-10
    • 2016-10-02
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多