You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内curl下载的opentelemetry-javaagent.jar无法使用问题求助

Docker中curl下载opentelemetry-javaagent.jar报错的解决方法

问题原因

GitHub Releases的下载链接会自动重定向到CDN节点,默认情况下curl不会自动跟随HTTP重定向,导致实际下载的内容是跳转页面的HTML代码,而非真正的JAR文件。启动时JVM校验JAR完整性失败,就会抛出Error opening zip file or JAR manifest missing错误。

而使用ADD指令本地导入文件时,直接复制的是你手动下载好的完整JAR包,不存在下载过程中的重定向问题,因此可以正常运行。

解决方案

1. 给curl添加重定向跟随参数

修改Dockerfile中的curl命令,加上-L参数强制跟随重定向:

RUN curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar -o /tmp/opentelemetry-javaagent.jar && \
    chmod 540 /tmp/opentelemetry-javaagent.jar

2. 可选:验证文件完整性(推荐)

为了确保下载的JAR文件没有损坏,可以添加SHA256哈希校验步骤(哈希值可从对应版本的GitHub Release页面获取):

RUN curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar -o /tmp/opentelemetry-javaagent.jar && \
    echo "替换为v1.30.0版本的SHA256校验值  /tmp/opentelemetry-javaagent.jar" | sha256sum -c - && \
    chmod 540 /tmp/opentelemetry-javaagent.jar

3. 替代方案:使用wget下载

wget默认会自动跟随重定向,也可以解决这个问题:

RUN wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar -O /tmp/opentelemetry-javaagent.jar && \
    chmod 540 /tmp/opentelemetry-javaagent.jar

修改后的完整Dockerfile示例

FROM eclipse-temurin:17-jre

ARG RUN_JAVA_VERSION=1.3.8
ENV APP my-project
ENV JAVA_OPTIONS="-XshowSettings:vm"
ENV SPRING_PROFILES_ACTIVE=docker


ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,address=10200,server=y,suspend=n -javaagent:/tmp/opentelemetry-javaagent.jar -Dotel.service.name=format-adapter -Dotel.traces.exporter=zipkin

WORKDIR /app

RUN apt-get update -q \
    && apt-get install -y --no-install-recommends wget curl \
    && rm -Rf /var/lib/apt /var/cache/apt


RUN curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /app/run-java.sh && \
    chmod 540 /app/run-java.sh


# 修复后的curl命令
RUN curl -L https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar -o /tmp/opentelemetry-javaagent.jar && \
    chmod 540 /tmp/opentelemetry-javaagent.jar

ADD build/libs/${APP}-*.jar /app/${APP}.jar

HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost:${SERVER_PORT}/actuator/health || exit 1

ENTRYPOINT ["/app/run-java.sh"]

内容的提问来源于stack exchange,提问作者João Matos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 00:40:30