核心是通过-javaagent挂载SkyWalking探针或引入Zipkin依赖,配置服务名与后端地址(如skywalking-oap:11800),并确保容器共用自定义网络以实现DNS解析和端口连通,无需改代码。

在 Docker 容器中为 Java 应用接入 SkyWalking 或 Zipkin,核心是让应用能将链路数据上报到对应的后端服务(OAP 服务器或 Zipkin Server),同时确保网络连通、探针/依赖配置正确。不需要改代码,但需合理配置容器网络和启动参数。
SkyWalking Agent 方式(推荐,无侵入)
SkyWalking 提供 Java Agent,无需修改代码,只需挂载探针并设置 JVM 参数即可。适用于 Spring Boot、Dubbo、Tomcat 等主流框架。
- 下载对应版本的 apache-skywalking-apm-bin(如 9.7.0),从中提取
agent目录 - 构建镜像时将 agent 目录 COPY 到镜像内(例如
/skywalking/agent) - 启动 Java 应用时通过
-javaagent指定路径,并配置后端 OAP 地址(默认11800):
JAVA_TOOL_OPTIONS="-javaagent:/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=my-service -Dskywalking.collector.backend_service=skywalking-oap:11800"
注意:skywalking-oap 是 Docker 网络中 OAP 容器的服务名(需共用同一自定义 bridge 网络),不能写 localhost 或 127.0.0.1。
立即学习“Java免费学习笔记(深入)”;
Zipkin + Brave(需少量代码或 starter)
Zipkin 更依赖客户端 SDK。Spring Boot 项目推荐直接使用 spring-cloud-starter-zipkin(Spring Cloud 2020+ 后已移除内置支持,需配合 brave-instrumentation-http 或 zipkin-reporter-urlconnection)。
- Maven 加入依赖(以 Brave 为例):
<dependency>
<groupId>io.zipkin.brave</groupId>
<artifactId>brave-instrumentation-spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-urlconnection</artifactId>
</dependency>
- 配置
application.yml指向 Zipkin Server(Docker 中应填服务名):
spring:
zipkin:
base-url: http://zipkin-server:9411
sleuth:
sampler:
probability: 1.0
Docker 网络与服务编排关键点
无论用 SkyWalking 还是 Zipkin,容器间通信必须通畅。强烈建议使用 docker-compose 统一管理,并显式定义自定义网络:
- 所有服务(Java 应用、OAP/Zipkin、ES/MySQL 等存储)放在同一个
networks下 - OAP 默认监听
11800(gRPC)和12800(HTTP),Zipkin 默认监听9411(HTTP) - Java 应用容器内 DNS 可解析其他服务名(如
skywalking-oap、zipkin-server),这是容器通信前提 - 若用宿主机网络(
network_mode: host),则可直接用localhost,但会失去网络隔离,不推荐生产环境
验证与调试技巧
上线前务必验证数据是否成功上报:
- 访问 SkyWalking UI(默认
http://localhost:8080)或 Zipkin UI(http://localhost:9411),查看是否有服务列表和 trace - 进入 Java 容器执行
ps aux | grep java,确认-javaagent参数已生效 - 查看 Java 应用日志,SkyWalking Agent 启动时会打印
skywalking agent service name is xxx;Brave 初始化成功也会输出类似信息 - 临时在容器内用
curl -v http://skywalking-oap:11800测试连通性(需安装 curl)


















