微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 IPv6 环回接口上绑定到 http://localhost:5000:发布版本的“无法分配请求的地址”

如何解决无法在 IPv6 环回接口上绑定到 http://localhost:5000:发布版本的“无法分配请求的地址”

我正在尝试在本地机器上的 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 以在云端运行。

解决方法

经过2天的挖掘,我发现了问题。这一点都不明显。我使用 appsettings.json,并使用模型读取它,并将其注入 { "compilerOptions": { "module": "commonjs","target": "es6","outDir": "out","lib": [ "es6" ],"sourceMap": true,"rootDir": "src","strict": true },"exclude": [ "node_modules",".vscode-test" ] }

处的 IConfiguration
Startup.cs

打破一切的那条线是第二条:

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

    services.AddSingleton<IConfiguration>(Configuration);

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

    services.AddSingleton<IConfiguration>(Configuration);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。