下载时无法在Docker容器中使用jar文件

evrscar2  于 12个月前  发布在  Docker
关注(0)|答案(1)|浏览(114)

**上下文:**我正在尝试在我的Spring项目中使用OpenTelemetry-JavaAgent。

如果我在Dockerfile中使用curl获取文件:

RUN curl 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

当我运行Docker镜像时,我得到以下错误:

Error opening zip file or JAR manifest missing : /tmp/opentelemetry-javaagent.jar
Error occurred during initialization of VM
agent library failed to init: instrument

但是,如果我手动下载该文件并添加它:

ADD opentelemetry-javaagent.jar /tmp/opentelemetry-javaagent.jar
RUN 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

#THIS DOESN'T WORK
RUN curl 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

##THIS WORKS
#ADD opentelemetry-javaagent.jar /tmp/opentelemetry-javaagent.jar
#RUN 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"]
hmae6n7t

hmae6n7t1#

给定的URL会生成一个重定向,除非您添加-L开关,否则curl不会遵循该重定向,因此Dockerfile中的curl命令不会下载任何内容。
作为替代,wget默认遵循重定向(我看到您安装了curlwget,但基础映像已经包含这两个);但是,更好的Dockerfile特定的替代方法是ADD命令:

ADD --chmod=540 https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar /tmp/opentelemetry-javaagent.jar

在任何情况下,您都可以删除RUN apt-get块以获得更小的图像。

相关问题