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

问题描述 投票:0回答:2

这个问题类似于 From inside of a Docker container, how do I connect to the localhost of the machine?,但由于在

--network="host"
命令中使用
docker run
对我来说不起作用,所以我问再次询问我的具体用例。

我有一个在端口 9095 上本地运行的 Java gRPC 服务器,它实现了 gRPC 健康检查协议:

> 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
给出与本地计算机上相同的结果?如何让这个容器探测本地健康服务器?

docker grpc
2个回答
0
投票

为什么要创建一个新容器来检查运行状况,为什么要在这种情况下以任何方式检查运行状况?

通常,grpc_health_probe 用于检查 K8s 等编排环境中容器的健康状况。并且您必须将二进制文件

grpc_health_probe
包含到您的容器中,并在就绪或活跃度问题中使用本地主机环回调用它:

          livenessProbe:
            failureThreshold: 3
            exec:
              command: ["/bin/grpc_health_probe-linux-amd64", "-addr=localhost:50051"]
            initialDelaySeconds: 60
            periodSeconds: 60
            timeoutSeconds: 30
          readinessProbe:
            failureThreshold: 3
            exec:
              command: ["/bin/grpc_health_probe-linux-amd64", "-addr=localhost:50051"]
            initialDelaySeconds: 20
            periodSeconds: 20
            timeoutSeconds: 30         

或者使用 docker-compose 如下:

healthcheck:
            test: ["CMD", "bin/grpc_health_probe-linux-amd64", "-addr=localhost:50051"]
            interval: 30s
            timeout: 30s
            retries: 3

0
投票

这只是在特权模式下运行 docker 容器的问题:

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

https://docs.docker.com/engine/reference/commandline/container_run/#privileged

© www.soinside.com 2019 - 2024. All rights reserved.