拨 tcp 127.0.0.1:9091: 连接: 连接被拒绝

She*_*ker 6 ubuntu protocol-buffers grpc grpc-java protobuf-java

我正在使用 gRPC 应用程序并构建一个简单的应用程序。在文件下面。

syntax = "proto3";
option java_multiple_files = true;
package com.grpc;

message HelloRequest {
    string firstName = 1;
    string lastname = 2;
}
message HelloResponse {
    string greeting = 1;
}
service HelloService {
    rpc hello(HelloRequest) returns (HelloResponse);
}
Run Code Online (Sandbox Code Playgroud)

它正常生成文件

User.java -> generated from protoc compiler
userGrpc.java -> generated from protoc compiler
Run Code Online (Sandbox Code Playgroud)

GRPC服务.java

package GRPCService;

import java.io.IOException;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import user.UserService;

public class GPRCService {
    public static void main(String[] args) throws IOException, InterruptedException {
        Server server = ServerBuilder.forPort(9091).addService(new UserService()).build();  
        server.start();
        System.out.println("Server started at " +  server.getPort());
        server.awaitTermination();
    }
}
Run Code Online (Sandbox Code Playgroud)

system.out.println 显示服务器正在运行;

Server started at 9091
Run Code Online (Sandbox Code Playgroud)

然后我在 ubuntu 18.04 的端口 9091 上打开了 TCP 的防火墙规则

sudo ufw allow from any to any port 9091 proto tcp
Run Code Online (Sandbox Code Playgroud)

结果:

java      28277    ubuntu   49u  IPv6   478307      0t0  TCP *:9091 (LISTEN)
Run Code Online (Sandbox Code Playgroud)

我什至可以从终端卷曲

* Rebuilt URL to: http://localhost:9091/
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 9091 (#0)
> GET / HTTP/1.1
> Host: localhost:9091
> User-Agent: curl/7.58.0
> Accept: */*
> 
Warning: Binary output can mess up your terminal. Use "--output -" to tell 
Warning: curl to output it to your terminal anyway, or consider "--output 
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 40)
* stopped the pause stream!
* Closing connection 0
Run Code Online (Sandbox Code Playgroud)

卷曲命令

   curl -v http://localhost:9091
Run Code Online (Sandbox Code Playgroud)

但是当从 gui 客户端执行时

https://github.com/gusaul/grpcox

我的连接被拒绝。

dial tcp 127.0.0.1:9091: connect: connection refused
Run Code Online (Sandbox Code Playgroud)

来自客户端的错误

我没有使用任何 VPN 或代理,GUI 应用程序实际上在容器内运行。

docker run -p 6969:6969 -v {ABSOLUTE_PATH_TO_LOG}/log:/log -d gusaul/grpcox
Run Code Online (Sandbox Code Playgroud)

如果有人可以请帮助我。

谢谢堆栈!

Daz*_*kin 5

如果您grpcox作为 docker 容器运行,则需要为容器提供主机网络访问权限(最简单),以便它可以访问在主机 (!) 端口9901ie上运行的服务器localhost:9901,或者为其提供一个 DNS 地址它可以解析您的主机地址,即your-host:9901

对于主机网络访问,运行容器...

docker run --net=host ... gusaul/grpcox
Run Code Online (Sandbox Code Playgroud)