Python 无法连接到在本地Docker容器中运行的gRPC服务

Python 无法连接到在本地Docker容器中运行的gRPC服务,python,docker,grpc,grpc-python,Python,Docker,Grpc,Grpc Python,我确实读了[这个类似问题][1]的答案,但这无助于我解决这个问题 我的设置: 远程gRPC服务 直接在主机上运行的.py客户端 在这种配置下,一切正常。但是,如果我在本地Docker容器中启动远程gRPC服务(.py客户端仍在本地运行): 我用来运行gRPC服务的命令:sudockerrun--rm-it-u dud--net=host--entrypoint=/usr/local/bin/application COOL\u APP 以下是我的.py客户端的代码片段: HOST = 'lo

我确实读了[这个类似问题][1]的答案,但这无助于我解决这个问题

我的设置:

  • 远程gRPC服务
  • 直接在主机上运行的
    .py
    客户端
在这种配置下,一切正常。但是,如果我在本地Docker容器中启动
远程gRPC服务
.py
客户端仍在本地运行):

我用来运行gRPC服务的命令:
sudockerrun--rm-it-u
dud--net=host--entrypoint=/usr/local/bin/application COOL\u APP

以下是我的
.py
客户端的代码片段:

HOST = 'localhost'
PORT = '9000'
with grpc.insecure_channel('{}:{}'.format(HOST, PORT)) as channel:
我收到以下错误(AFAIK这意味着我的
.py
客户端无法连接到我的Docker服务的
主机:端口
):

也就是说,我的终端没有为
tcp:9000
显示任何内容(我运行上面的命令来检查是否有东西真正在侦听
localhost:9000

更新:当我使用
-p 9000:9000运行
hello world
[container][2]时,我收到一个不同的错误:

debug_error_string = "{"created":"@1550580085.678869000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1036,"grpc_message":"Socket closed","grpc_status":14}"
``` so I assume something is wrong with my gRPC service image / Docker flags.


  [1]: https://stackoverflow.com/questions/43911793/cannot-connect-to-go-grpc-server-running-in-local-docker-container
  [2]: https://github.com/crccheck/docker-hello-world

您需要告诉docker将端口暴露在外部

尝试将
-p 9000:9000
添加到docker运行命令。

正确的命令是:

docker run -p 9000:9000 -it -u dud --entrypoint=/usr/local/bin/application COOL_APP

基本上使用了
-p 9000:9000
并删除了
--net=host

您的主机ip不是本地主机,而是docker的ip地址。
您可以通过“docker network inspect bridge | grep IPv4Address”找到docker ip。这完全有道理,但不起作用:我尝试了
localhost:9000
0.0.0:9000
,以及
:9000
作为
host:port
,错误保持不变。客户端在哪里运行;直接在主机上还是在其他容器中?
user-dev:~ user$ lsof -i tcp:8080
COMMAND     PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
myservice 53941 user    6u  IPv4 0x40c50fcf1d04701d      0t0  TCP localhost:http-alt (LISTEN)
user-dev:~ user$ lsof -i tcp:9000
debug_error_string = "{"created":"@1550580085.678869000","description":"Error received from peer","file":"src/core/lib/surface/call.cc","file_line":1036,"grpc_message":"Socket closed","grpc_status":14}"
``` so I assume something is wrong with my gRPC service image / Docker flags.


  [1]: https://stackoverflow.com/questions/43911793/cannot-connect-to-go-grpc-server-running-in-local-docker-container
  [2]: https://github.com/crccheck/docker-hello-world
docker run -p 9000:9000 -it -u dud --entrypoint=/usr/local/bin/application COOL_APP