如何在容器中使用 gRPC 健康探测来检查本地机器上运行的服务的健康状况?

时间:2021-03-04 20:50:51

标签: docker grpc

此问题类似于 From inside of a Docker container, how do I connect to the localhost of the machine?,但由于在 --network="host" 命令中使用 docker run 对我不起作用,因此我针对我的特定用例再次询问此问题。< /p>

我有一个 Java gRPC 服务器在本地运行在端口 9095 上,它实现了 gRPC health checking protocol

> lsof -i :9095
COMMAND   PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    17538 kurtpeek   89u  IPv6 0x14676dca7273b22d      0t0  TCP *:9095 (LISTEN)

我想通过使用 grpc-health-probe 来验证是否是这种情况。由于该存储库只有 Linux 操作系统的版本,但我运行的是 Mac,我想从 Docker 容器执行此操作,该容器设置为将请求转发到 localhost:9095 到主机。

使用这个 Dockerfile,

FROM ubuntu

RUN apt-get update && apt-get -y install lsof wget
RUN GRPC_HEALTH_PROBE_VERSION=v0.3.6 && \
    wget -qO/bin/grpc_health_probe https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/${GRPC_HEALTH_PROBE_VERSION}/grpc_health_probe-linux-amd64 && \
    chmod +x /bin/grpc_health_probe

我使用 docker build --tag healthprobe . 构建图像,然后使用命令以交互模式运行它

docker run -it --network="host" healthprobe bash

但是,运行 /bin/grpc_health_probe -addr=:9095 并没有成功连接到本地 gRPC 服务器,并且 lsof 没有显示该端口上正在侦听任何内容:

root@docker-desktop:/# /bin/grpc_health_probe -addr=:9095
timeout: failed to connect service ":9095" within 1s
root@docker-desktop:/# lsof -i :9095
root@docker-desktop:/#

是否应该使用 --network="host" 不能确保 lsof 给我的结果与我的本地机器上的结果相同?如何让这个容器探测本地健康服务器?

0 个答案:

没有答案