Python 无法连接到在本地Docker容器中运行的gRPC服务
我确实读了[这个类似问题][1]的答案,但这无助于我解决这个问题 我的设置: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
- 远程gRPC服务李>
- 直接在主机上运行的
客户端.py
远程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