2017-06-20 44 views
2

我正在实现两个运行在两个不同容器上的服务(服务器和客户端),并试图使用gRPC在它们之间进行通信。使用gRPC在容器之间进行通信

如果我将服务器部署为容器,并在容器上运行客户端而不是,则一切正常。但是,如果我将客户端部署在不同的容器上,则会出现Error #01: could not retrieve restaurant's list: rpc error: code = Unavailable desc = grpc: the connection is unavailable错误。

我错过了使用gRPC来沟通两个不同容器的步骤? PS:我现在想尝试没有Kubernetes。

SERVER

func Serve() { 

    log.Println("serving...") 

    port := ":50051" 

    lis, err := net.Listen("tcp", port) 
    if err != nil { 
     log.Fatalf("failed to listen on port %s: %v", port, err) 
    } 

    s := grpc.NewServer() 
    server := server{} 
    RegisterNeo4BaconServer(s, server) 

    if err := s.Serve(lis); err != nil { 
     log.Fatal("could not serve: ", err) 
    } 
} 

生成文件

image: ## build docker image and push image to registry 
    @docker build -t neo4bacon -f resources/prod/Dockerfile . 

run: ## deploy application container 
    @docker run --rm -d --name neo4bacon neo4bacon 

CLIENT

func Get() (*api.RestaurantList, error) { 
    // Neo4bacon backend 
    backendPort := ":50051" 

    conn, err := grpc.Dial(backendPort, grpc.WithInsecure()) 
    if err != nil { 
     &api.RestaurantList{}, fmt.Errorf("could not connect to backend %s: %s", backendPort, err) 
    } 
    defer conn.Close() 

    client := api.NewNeo4BaconClient(conn) 

    restaurantList, err := client.List(context.Background(), &api.Empty{}) 
    if err != nil { 
     return &api.RestaurantList{}, fmt.Errorf("could not retrieve restaurant's list: %s", err) 
    } 
    return restaurantList, nil 
} 

Makefile文件

image: ## build docker image and push image to registry  
@docker build -t alesr/bacon-api -f resources/prod/Dockerfile .  

run: ## deploy docker container  
@docker run --rm -d -p 8080:8080 --name bacon-api bacon-api 
+2

凡在客户端代码你指定要连接到的服务器主机?我没有看到... –

回答

4

您需要在拨号功能的主机名,否则在看本地主机是唯一的每个容器(泊坞窗默认创建的容器单独的网络命名空间)。更改以下:

backendPort := "neo4bacon:50051" 

编辑:你还需要安装一个网络和容器连接到该网络,因为默认的桥不包括DNS发现:

docker network create baconnet 
docker run --rm -d --net baconnet --name neo4bacon neo4bacon 
docker run --rm -d --net baconnet -p 8080:8080 --name bacon-api bacon-api 
相关问题