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

evrscar2  于 2023-10-16  发布在  Docker
关注(0)|答案(1)|浏览(153)

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

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

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

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

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

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

  1. ADD opentelemetry-javaagent.jar /tmp/opentelemetry-javaagent.jar
  2. RUN chmod 540 /tmp/opentelemetry-javaagent.jar

它工作正常。我可能错过了一些明显的东西,但不能把我的手指上。有人知道我错过了什么吗?先谢了。
以下是完整的Dockerfile:

  1. FROM eclipse-temurin:17-jre
  2. ARG RUN_JAVA_VERSION=1.3.8
  3. ENV APP my-project
  4. ENV JAVA_OPTIONS="-XshowSettings:vm"
  5. ENV SPRING_PROFILES_ACTIVE=docker
  6. 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
  7. WORKDIR /app
  8. RUN apt-get update -q \
  9. && apt-get install -y --no-install-recommends wget curl \
  10. && rm -Rf /var/lib/apt /var/cache/apt
  11. 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 && \
  12. chmod 540 /app/run-java.sh
  13. #THIS DOESN'T WORK
  14. RUN curl https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v1.30.0/opentelemetry-javaagent.jar -o /tmp/opentelemetry-javaagent.jar && \
  15. chmod 540 /tmp/opentelemetry-javaagent.jar
  16. ##THIS WORKS
  17. #ADD opentelemetry-javaagent.jar /tmp/opentelemetry-javaagent.jar
  18. #RUN chmod 540 /tmp/opentelemetry-javaagent.jar
  19. ADD build/libs/${APP}-*.jar /app/${APP}.jar
  20. HEALTHCHECK --interval=5m --timeout=3s \
  21. CMD curl -f http://localhost:${SERVER_PORT}/actuator/health || exit 1
  22. ENTRYPOINT ["/app/run-java.sh"]
hmae6n7t

hmae6n7t1#

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

  1. 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块以获得更小的图像。

相关问题