Docker部署jaeger:手把手教你用Docker部署
手把手教你用Docker部署Jaeger链路追踪系统
如果你正在做微服务架构调试或性能分析,Jaeger 是一个非常实用的链路追踪工具。
本文围绕 Docker部署jaeger 展开,按零基础也能直接照做的方式讲清准备条件、操作步骤、常见报错和验证方法。
环境与前提
- 一台已安装 Docker 的 Linux 服务器(推荐 2 核 4G 以上)。
- Docker 版本不低于 20.10。
- 服务器防火墙开放 16686(Web 管理界面)和 6831/6832(Agent UDP 端口)等。
- 确保能正常拉取 Docker Hub 镜像(若使用国内服务器,建议配置镜像加速器)。
检查 Docker 是否安装:
docker --version
如果未安装,参考官方文档或使用包管理器安装(如 yum install -y docker-ce)。
Docker 一键部署 Jaeger(all-in-one 模式)
对于测试或小规模使用,官方提供 all-in-one 镜像,包含 Agent、Collector、Query 和 UI,一个容器搞定。
执行以下命令启动:
docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:latest
参数说明:
-d后台运行。--name jaeger容器名。-e COLLECTOR_ZIPKIN_HOST_PORT=:9411开启 Zipkin 兼容端口(可不加)。- 端口映射:
16686是 Web UI,6831/6832是 Agent 接收 Jaeger 客户端数据的 UDP 端口,14268为 Collector 的 HTTP 端口,14250为 gRPC 端口。
启动后可通过 docker ps 确认容器状态:
docker ps | grep jaeger
看到 STATUS Up 即正常。
配置文件与关键参数说明
若需要使用持久化存储(而非默认内存),可以通过挂载外部存储或配置环境变量。
例如将数据保存到 Elasticsearch:
docker run -d --name jaeger \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://your-es:9200 \
-p 16686:16686 \
jaegertracing/all-in-one:latest
注意:生产环境建议拆分部署(Agent、Collector、Query 等组件各自独立),但本文只演示 all-in-one 入门用法。
另外,时区问题常见于日志时间显示。
在 docker run 中添加 -e TZ=Asia/Shanghai 即可设置时区。
常见问题与避坑
Q1:端口被占用怎么办?
例如 16686 已被其他应用占用,可修改宿主端口映射:-p 8080:16686,之后通过 http://服务器IP:8080 访问。
Q2:启动时提示 "port is already allocated"
停掉占用端口的容器:docker stop <容器名> 或者更换端口映射。
Q3:Web UI 打开后看不到任何数据?
检查应用是否已正确配置 Jaeger 客户端(如 OpenTelemetry SDK),并确保 Agent 地址能访问。若只在本地测试,可以先用官方示例应用:
docker run --rm -p 8000:8000 jaegertracing/example-hotrod:latest all
该应用会自动向 jaeger 发送数据,然后在 UI 中搜索 service 名为 hotrod 的 trace。
避坑清单:
- 防火墙 / 安全组必须放行 UDP 6831、6832 和 TCP 16686。
- 容器名不能重复,建议每次先
docker rm -f jaeger再重新创建。 - 默认存储为内存,重启容器后历史数据丢失,生产务必配置持久化后端。
验证是否部署成功
打开浏览器访问 http://你的服务器IP:16686,看到 Jaeger UI 页面。
点击左侧“Search”标签,在“Service”下拉框中如果能看到 hotrod 或你的应用 service 名,说明 Docker部署jaeger 已成功上线并收到了追踪数据。
你可以点击任意 trace 查看调用链详情(每条 span 的耗时、标签、日志等)。
至此,链路追踪系统搭建完成,后续可对接任意 OpenTelemetry 或 Jaeger 客户端 SDK。
如果你正在处理 Docker部署jaeger,建议先按本文步骤完整执行,再根据自己的环境做微调;
遇到异常时优先回看避坑和高频问题部分,通常能快速解决。