www.example.com 6.0应用程序中的Docker compose和Kestrel问题asp.net

fhity93d  于 2023-04-05  发布在  Docker
关注(0)|答案(3)|浏览(130)

我尝试使用docker(Windows系统上的Linux容器)运行我的aspnet 6.0应用程序,并遇到问题。当我不尝试配置kestrel时,它运行得很好。但每当我尝试添加下面的代码时,我都会遇到问题,说“无法访问此站点,本地主机意外关闭了连接。”

builder.WebHost.ConfigureKestrel(serverOptions =>
{

    serverOptions.Listen(IPAddress.Any, 5005, options =>
    {
        options.Protocols = HttpProtocols.Http2;

    });
    serverOptions.Listen(IPAddress.Any, 7173, options =>
    {
        options.Protocols = HttpProtocols.Http1AndHttp2;
    });
});

我尝试使用端口5005用于GRpc目的,7173用于暴露rest API端点。我使用visual studio 2022并通过添加docker支持生成DockerFile。
以下是docker compose、compose-override yaml和container snaps。x1c 0d1x


我也试过添加https支持,但没有运气。

serverOptions.Listen(IPAddress.Any, 7173, options =>
    {
        options.Protocols = HttpProtocols.Http1AndHttp2;
        options.UseHttps("appname.pfx", "password");
    });

请注意:当我不在docker上运行时,上面所有的代码行都工作得很好

3npbholx

3npbholx1#

我在docker compose中这样配置它,否则我也无法让它工作。

version: '3.8'

services:
  myservice:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:8000;http://+:5000
      - Kestrel__Endpoints__gRPC__Url=http://*:5000
      - Kestrel__Endpoints__gRPC__Protocols=Http2
      - Kestrel__Endpoints__Http__Url=http://*:8000
    ports:
      - "8000:8000"
      - "5000:5000"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
3lxsmp7m

3lxsmp7m2#

我想你也可以在appsettings.json中配置这个:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "Kestrel": {
    "Endpoints": {
      "WebApi": {
        "Url": "http://localhost:7173",
        "Protocols": "Http1"
      },
      "gRPC": {
        "Url": "http://localhost:5005",
        "Protocols": "Http2"
      }
    }
  }
}
ztmd8pv5

ztmd8pv53#

不得不在DockerFile中暴露相同的端口,正如@CodingMytra在评论中指出的那样

相关问题