如何解决无法在 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"
]
}
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 举报,一经查实,本站将立刻删除。