问题背景
为了学习分布式日志追踪体系统jeager
,在WSL2中部署了jaegertracing/all-in-one
和jaegertracing/example-hotrod
。
- 问题1:使用
localhost:16686
可以打开jeager-ui
,但使用127.0.0.1:16686
则打不开。 - 问题2:但在使用过程中出现了错误,无法将spans信息上传至
jeager-agent
、在jeager-ui
中查询不到服务的traces信息。错误信息如下:
failed to flush Jaeger spans to server: write udp 127.0.0.1:59661-127.0.0.1:6831: write: connection refused {"service": "frontend"}
系统的部署命令如下:
jaegertracing/all-in-one
启动命令:
$ docker run \
> -p 5775:5775/udp \
> -p 16686:16686 \
> -p 6831:6831/udp \
> -p 6832:6832/udp \
> -p 5778:5778 \
> -p 14268:14268 \
> jaegertracing/all-in-one:latest
jaegertracing/example-hotrod
启动命令:
$ docker run --rm \
> --link aff4a0b4a3c5 \
> --env JAEGER_AGENT_HOST=localhost \
> --env JAEGER_AGENT_PORT=6831 \
> -p8080-8083:8080-8083 \
> jaegertracing/example-hotrod:latest all
问题原因:
问题出现在WSL2!与WSL1不一样的是,WSL2可以视为一个独立的虚拟机、具有自己独立的IP地址,通过虚拟路由器与Windows连接。在WSL2中部署的服务在Windows中无法直接通过127.0.0.1进行访问、但可以通过localhost访问,这应该是采用了一些特殊的内部链路技术来实现的。
为了直接在Windows中访问部署在WSL2中的服务,需要获取WSL2的ip地址,可以在WSL2中用ip addr命令或者ifconfig命令获取。需要注意的是:WSL2的IP地址是动态的,每次启动后都会不一样!
WSL2正式版出来前慎用!