此问题类似于 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
给我的结果与我的本地机器上的结果相同?如何让这个容器探测本地健康服务器?