我用grpc server.in vs构建了样例项目,一切都很好,我的项目做得很好。dokcer-compose.yaml .dokcer是:
version: '3.3'
services:
grpcService:
container_name: grpcserver
image: grpcImage
ports:
- "5003:5003" //client
- "5001:5001" //grpc server
restart: always在项目中,我为grpc服务器设置了http://127.0.0.1:5001
并为我处理的客户端设置http://127.0.0.1:5003 (使用http的grpc服务器)
当docker-组合并调用api时,找不到故障d和grpc服务器,等等。
发布于 2020-09-28 04:54:11
必须在CreateHostBuilder Grpc服务器中将program.cs更改为此代码
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;
});
});
});
}5001是grpc服务器端口。(将此端口更改为您的grpc服务器端口)
发布于 2020-09-28 16:57:42
从您的问题中还不完全清楚客户机和服务器是如何分开的;我通常希望在Docker文件中看到两个服务:一个用于服务器,另一个用于客户机。
很有可能(!)您的客户端无法连接到服务器,因为您正在使用回送(127.0.0.1)地址。回送是一种在不使用机器的网络堆栈的机器内路由通信量的短路方式。因此,环回通信量不会暴露在容器之外,因此客户端无法访问。
运行时最好使用0.0.0.0作为服务器的地址(!)服务器使服务器被绑定到网络堆栈,并且可以被主机和其他服务(容器)使用。在您的Docker文件中,此服务将被赋予grpcService的DNS名称(可能只有小写!?)并且可以以grpcservice:5003的形式从Docker文件(网络)中运行的另一个服务访问。
备注与Docker文件(及其网络)一起使用,服务器将绑定到您运行的任何端口,如
5003。ports: - "XXXX:5003"是多余的*除非您希望在端口XXXX.
上可用时,从主机( Docker撰写网络之外)访问该服务。
https://stackoverflow.com/questions/64093550
复制相似问题