【问题标题】:Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address' for release version无法绑定到 IPv6 环回接口上的 http://localhost:5000:发布版本的“无法分配请求的地址”
【发布时间】:2021-04-26 09:09:26
【问题描述】:

我正在尝试在本地机器上的 docker 容器中测试我的应用程序的发布版本,当我启动容器时,我不断收到以下警告,并且它拒绝了请求:

Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

我检查了this post,这不是问题所在,我还无法找到问题的根本原因。当我提出要求时,他们被拒绝了。该应用程序在 Docker 之外正常工作。下面是我的dotnet publish 命令:

dotnet publish .\Sistema.Cadastro.Api\Sistema.Cadastro.Api.csproj -c Release --runtime linux-musl-x64 --interactive --no-self-contained

发布后,我生成我的容器。下面是我的Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
EXPOSE 5000
EXPOSE 5001

COPY System.Cadastro.Api/bin/Release/netcoreapp3.1/linux-musl-x64/publish/ /app
WORKDIR /app
ENTRYPOINT ["dotnet", "Sistema.Cadastro.Api.dll"]

构建容器后,我使用下面的docker-compose.yaml 来启动它:

version: '3'

services:
  siefcadapi:
    container_name: sistemacadapi
    image: localdocker/sistema.cadastro.api:latest
    ports:
        - 5000:5000
        - 5001:5001
    environment:
        - "ASPNETCORE_URLS=https://+:5001;http://+:5000"

下面是生成的日志:

docker-compose -f .\.docker\docker-compose.yaml up
Recreating sistemacadapi ... done
Attaching to sistemacadapi
sistemacadapi    | warn: Microsoft.AspNetCore.Server.Kestrel[0]
sistemacadapi    |       Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
sistemacadapi    | info: Microsoft.Hosting.Lifetime[0]
sistemacadapi    |       Now listening on: http://localhost:5000
sistemacadapi    | info: Microsoft.Hosting.Lifetime[0]
sistemacadapi    |       Application started. Press Ctrl+C to shut down.
sistemacadapi    | info: Microsoft.Hosting.Lifetime[0]
sistemacadapi    |       Hosting environment: Production
sistemacadapi    | info: Microsoft.Hosting.Lifetime[0]
sistemacadapi    |       Content root path: /app

我不需要在容器内进行调试,或者什么都不需要。我只想运行和测试我的应用程序,以便可以推送到 Azure 以在云端运行。

【问题讨论】:

    标签: docker docker-compose asp.net-core-webapi asp.net-core-3.1


    【解决方案1】:

    经过2天的挖掘,我发现了问题。这一点都不明显。我使用 appsettings.json,并使用模型读取它,并将其注入到 Startup.cs 的 IConfiguration 中

        var appConfigs = Configuration.GetSection("App").Get<AppConfigs>();
    
        services.AddSingleton<IConfiguration>(Configuration);
    

    打破一切的那一行是第二行:

        services.AddSingleton<IConfiguration>(Configuration);
    

    根据this answer的说法,.net core 2 之后就不需要再添加了。在调试过程中添加它并没有搞砸,但是一旦它在容器内运行,就会导致上面列出的错误。我刚刚删除了第二行,应用程序仍然可以正常运行,并且它也开始在容器内完美运行。

    Creating projeto_sistemacadastroapi_1 ... done
    Attaching to projeto_sistemacadastroapi_1
    sistemacadastroapi_1  | info: Microsoft.Hosting.Lifetime[0]
    sistemacadastroapi_1  |       Now listening on: http://[::]:80
    sistemacadastroapi_1  | info: Microsoft.Hosting.Lifetime[0]
    sistemacadastroapi_1  |       Application started. Press Ctrl+C to shut down.
    sistemacadastroapi_1  | info: Microsoft.Hosting.Lifetime[0]
    sistemacadastroapi_1  |       Hosting environment: Production
    sistemacadastroapi_1  | info: Microsoft.Hosting.Lifetime[0]
    sistemacadastroapi_1  |       Content root path: /app
    

    【讨论】:

    • 这浪费了我很多时间。找出原因了吗?
    • @lbrahim 确实我认为它坏了的原因列在我的回答中。它不应该被注入的事实,而且它确实可能搞砸了一些事情。删除后最后有用吗?我花了 2 天时间才弄明白。
    • 是的,它在删除它后可以工作,但如果不是因为这个问题,它就无法找到它。 github.com/dotnet/aspnetcore/issues/29928
    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 2020-08-24
    • 2012-12-25
    • 1970-01-01
    • 2017-04-13
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多