Asp.net core grpc服务器在docker compose中不工作

Asp.net core grpc服务器在docker compose中不工作,asp.net-core,grpc,Asp.net Core,Grpc,我用grpc服务器构建了一个示例项目。在vs中,一切正常,我的项目运行良好。 dokcer-compose.yaml是: version: '3.3' services: grpcService: container_name: grpcserver image: grpcImage ports: - "5003:5003" //client - "5001:5001" //grpc server

我用grpc服务器构建了一个示例项目。在vs中,一切正常,我的项目运行良好。 dokcer-compose.yaml是:

version: '3.3' 
services:
  grpcService:
    container_name: grpcserver
    image:  grpcImage
    ports:
      - "5003:5003"  //client
      - "5001:5001"  //grpc server
    restart: always
在项目中,我设置
http://127.0.0.1:5001
用于grpc服务器

并设置
http://127.0.0.1:5003
用于客户端 I句柄(grpc服务器使用http)


当docker编写并调用api时,出现故障且未找到grpc服务器等

您必须在program.cs grpc server中将CreateHostBuilder更改为该代码

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>().ConfigureKestrel(options =>
                {
                    options.Listen(IPAddress.Any, 5001, listenOptions =>
                    {
                        listenOptions.Protocols = HttpProtocols.Http2;
                    });
                });
            });
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup().ConfigureKestrel(选项=>
{
选项.Listen(IPAddress.Any,5001,listenOptions=>
{
listenOptions.Protocols=HttpProtocols.Http2;
});
});
});
}

5001
是grpc服务器端口。(将此端口更改为您的grpc服务器端口)

您的问题并不完全清楚您的客户端和服务器是如何分开的;我通常希望在Docker Compose文件中看到两个服务:一个用于服务器,另一个用于客户端

很可能(!)您的客户端无法连接到服务器,因为您正在使用环回(
127.0.0.1
)地址。环回是一种在可能不使用机器网络堆栈的机器内路由流量的短路方式。因此,环回通信不会暴露在容器之外,因此客户端无法访问

在运行(!)服务器时,最好使用
0.0.0.0
作为服务器地址,这样服务器将绑定到网络堆栈,并可由主机和其他服务(容器)使用。在Docker Compose文件中,此服务的DNS名称为
grpcService
(可能只有小写!?),并且可以从Docker Compose文件(网络)中运行的另一个服务访问,如
grpcService:5003

注意使用Docker Compose文件(及其网络),服务器将绑定到您运行它的任何端口,例如
5003
端口:-“XXXX:5003”
是冗余的*除非您希望在端口
XXXX
上提供此服务时从主机(Docker Compose网络外部)访问此服务


谢谢,我第一次使用0.0.0.0检查,但运行docker容器时看不到我的api s,在127.0.0.1中,我可以看到api s但无法连接到grpcWow,
0.0.0
对我有效。我没想到会发生这样的事。谢谢