Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 使用gRPC在容器之间进行通信_Docker_Go_Grpc - Fatal编程技术网

Docker 使用gRPC在容器之间进行通信

Docker 使用gRPC在容器之间进行通信,docker,go,grpc,Docker,Go,Grpc,我正在两个不同的容器上实现两个服务(服务器和客户端),并尝试使用gRPC在它们之间进行通信 如果将服务器部署为容器,并在容器上运行客户机而不是,则一切正常。但是如果我将客户端部署到另一个容器上,我会得到错误#01:无法检索餐厅列表:rpc错误:code=Unavailable desc=grpc:连接不可用错误 使用gRPC与两个不同的容器进行通信时,我遗漏了哪些步骤 附言:我现在想尝试不用库伯内特斯 服务器 func Serve() { log.Println("serving...

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

如果将服务器部署为容器,并在容器上运行客户机而不是,则一切正常。但是如果我将客户端部署到另一个容器上,我会得到
错误#01:无法检索餐厅列表:rpc错误:code=Unavailable desc=grpc:连接不可用
错误

使用gRPC与两个不同的容器进行通信时,我遗漏了哪些步骤

附言:我现在想尝试不用库伯内特斯

服务器

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)
    }
}
Makefile

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
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
客户端

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 neo4bacon -f resources/prod/Dockerfile .

run: ## deploy application container
    @docker run --rm -d --name neo4bacon neo4bacon
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

您需要在拨号函数中包含主机名,否则它将查看每个容器特有的localhost(docker默认情况下为容器创建单独的网络命名空间)。更改以下内容:

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

在客户机代码中的何处指定要连接的服务器主机?我看不出。。。