I am having an issue running a python grpc server in a docker container, where my server is up and running but there are no logs showing up.
This is what my proto file looks like
syntax = "proto3";// The health check service definition.service HealthCheckService { rpc HealthCheck (HealthCheckRequest) returns (HealthCheckResponse) {}}// The request message containing the client's name.message HealthCheckRequest { string client_name = 1;}// The response message containing the return messagemessage HealthCheckResponse { string message = 1;}
Python server Server.py
:
import grpcfrom concurrent import futuresfrom generated.health_check_service_pb2 import HealthCheckRequest, HealthCheckResponseimport generated.health_check_service_pb2_grpc as health_check_service_grpcclass HealthCheckServicer(health_check_service_grpc.HealthCheckService): def HealthCheck(self, request: HealthCheckRequest, context): return HealthCheckResponse(message="Hello, %s!" % request.client_name)def serve_grpc(): port = "50051" server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) health_check_service_grpc.add_HealthCheckServiceServicer_to_server(HealthCheckServicer(), server) server.add_insecure_port("[::]:" + port) server.start() print("GRPC Server started, listening on port " + port) server.wait_for_termination()if __name__ == '__main__': serve_grpc()
NodeJS client, client.js
:
var parseArgs = require('minimist');var messages = require('./generated/health_check_service_pb');var services = require('./generated/health_check_service_grpc_pb');var grpc = require('@grpc/grpc-js');function main() { var argv = parseArgs(process.argv.slice(2), { string: 'target' }); var target; if (argv.target) { target = argv.target; } else { target = 'localhost:50051'; } var client = new services.HealthCheckServiceClient(target, grpc.credentials.createInsecure()); var request = new messages.HealthCheckRequest(); var user; if (argv._.length > 0) { user = argv._[0]; } else { clientName = 'world'; } request.setClientName(clientName); client.healthCheck(request, function(err, response) { if (err) { console.log("ERROR:", err); } console.log('Health Check Response:', response.getMessage()); });}main();
To set up, I do this. Run ./gen-protos.sh
which does the following:
cd ../servermkdir -p generatedrm -rf generated/*pb2.pyirm -rf generated/*pb2_grpc.pyrm -rf generated/*pb2.pypython -m grpc_tools.protoc --proto_path=../protos --python_out=generated --grpc_python_out=generated --pyi_out=generated ../protos/*.protocd ../clientmkdir -p generatedrm -rf generated/*.jsgrpc_tools_node_protoc --proto_path=../protos --js_out=import_style=commonjs,binary:generated --grpc_out=grpc_js:generated ../protos/*.proto
Then I build the docker server and run it
docker build . -t grpc-test-serverdocker run -d -p 50051:50051 grpc-test-server
However, there are absolutely no logs from the print statements when I do docker container logs ..
, though I can hit the server with the node client by running node Client.js