如何解决grpc服务器无法在docker-compose中工作
我用grpc server.in建立示例项目,一切正常,我的项目很好用。 dokcer-compose.yaml是:
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
我处理(grpc服务器与http一起工作)
当docker-compose up并调用api时,失败并找不到grpc服务器,等等
解决方法
您必须在Program.cs Grpc服务器中将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;
});
});
});
}
5001
是grpc服务器端口。(将此端口更改为grpc服务器端口)
尚不清楚您的问题如何将客户端和服务器分开;我通常希望在Docker Compose文件中看到2种服务:一种用于服务器,另一种用于客户端。
由于您正在使用回送(127.0.0.1
)地址,因此客户端可能无法连接到服务器(!)。环回是在可能不使用计算机网络堆栈的计算机内路由流量的一种短路方法。因此,环回流量不会暴露在容器之外,因此客户端无法访问。
最好在运行(!)服务器时使用0.0.0.0
作为服务器的地址,以便将服务器绑定到网络堆栈,并可以由主机和其他服务(容器)使用。在您的Docker Compose文件中,此服务的DNS名称为grpcService
(可能仅小写!!),并且可以从运行在Docker Compose文件(网络)中的另一服务以grpcservice:5003
的身份访问。
注意,使用Docker Compose文件(及其网络),服务器将绑定到您运行它的任何端口,例如
5003
。ports: - "XXXX:5003"
是多余的* ,除非您希望从主机(在Docker Compose网络外部)访问此服务(当该端口在端口XXXX
可用时)。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。