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

无Dockerfile的Spring Boot应用如何配置OpenTelemetry Java Agent对接Jaeger

无Dockerfile下通过docker-compose配置OpenTelemetry Java Agent对接Jaeger链路追踪

我们的Spring Boot应用采用Jaeger UI实现链路追踪,当前使用bootBuildImage插件构建并推送镜像,不再依赖Dockerfile,因此原Dockerfile中下载opentelemetry-javaagent.jar并设置JAVA_TOOL_OPTIONS的步骤无法执行。以下是两种在docker-compose.yml中完成配置的方案:

方案一:本地下载Agent Jar并挂载到容器

步骤1:准备Agent文件

下载最新版的opentelemetry-javaagent.jar到项目根目录。

步骤2:修改docker-compose.yml

调整app服务配置,添加本地文件挂载并设置Java Agent环境变量:

services:
  app:
    # 移除原有的build配置(已通过bootBuildImage构建镜像)
    ports:
      - "8080:8080"
    image: demo-management
    container_name: demo-management-service
    volumes:
      # 将本地Agent Jar挂载到容器内指定路径
      - ./opentelemetry-javaagent.jar:/app/opentelemetry-javaagent.jar
    environment :
      - OTEL_SERVICE_NAME=demo-management
      - OTEL_TRACES_EXPORTER=jaeger
      - OTEL_EXPORTER_JAEGER_ENDPOINT=http://jaeger:14250
      - OTEL_METRICS_EXPORTER=none
      - OTEL_EXPORTER_JAEGER_TIMEOUT=40000
      # 设置Java Agent参数,路径与容器内挂载路径一致
      - JAVA_TOOL_OPTIONS="-javaagent:/app/opentelemetry-javaagent.jar"
  jaeger:
    container_name: jaeger
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"
      - "14250:14250"
networks:
  demo-management-network: {}

方案二:容器启动时动态下载Agent Jar

若不想提前下载本地文件,可通过修改容器启动命令,在启动应用前自动下载Agent Jar(需确保镜像内置curl和shell环境):

services:
  app:
    ports:
      - "8080:8080"
    image: demo-management
    container_name: demo-management-service
    environment :
      - OTEL_SERVICE_NAME=demo-management
      - OTEL_TRACES_EXPORTER=jaeger
      - OTEL_EXPORTER_JAEGER_ENDPOINT=http://jaeger:14250
      - OTEL_METRICS_EXPORTER=none
      - OTEL_EXPORTER_JAEGER_TIMEOUT=40000
    # 先下载Agent Jar,再启动Spring Boot应用
    command: >
      sh -c "
        curl -L -O https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar &&
        java -javaagent:./opentelemetry-javaagent.jar -jar /app/app.jar
      "
  jaeger:
    container_name: jaeger
    image: jaegertracing/all-in-one:latest
    ports:
      - "16686:16686"
      - "14250:14250"
networks:
  demo-management-network: {}

注意事项

  • 方案一中需确保本地opentelemetry-javaagent.jar的路径与docker-compose中volumes配置一致,容器内路径要和JAVA_TOOL_OPTIONS里的参数匹配。
  • 方案二需确认bootBuildImage构建的镜像包含curl和shell环境(部分轻量镜像可能缺失,此时方案一更可靠)。

内容的提问来源于stack exchange,提问作者Nithin U S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:54:57