首页 > 解决方案 > 无法使用 docker (windows) 访问 .net core web 应用程序

问题描述

这真让我抓狂:

我从 VS2019 创建了一个新的 .Net Core Web 应用程序,添加了对 docker(linux 容器)的支持。一切正常:如果我从 VS 启动调试器,则构建映像,启动容器并且 Web 应用程序可在http://localhost:32772/weatherforecast 获得

然后我把它全部清理干净,并尝试手动构建和运行:

docker build -t webapp2 --file webapplication2/Dockerfile .
docker run --name webapp2 -p 5000:5000 -t webapp2
(or even docker run --name webapp2 -p 5000:5000 -e "ASPNETCORE_ENVIRONMENT=Development" -t webapp2)

构建成功运行,并且(显然)运行命令也可以正常工作: 在此处输入图像描述 但是......惊喜......这样我就无法再访问应用程序了(在http://localhost:5000/weatherforecast)!

几乎尝试了任何东西,使用检查中的内部 IP 地址,更改端口并运行命令,添加 -e "ASPNETCORE_URLS= https://+:443;http://+:80 ",似乎没有任何效果。

那么问题来了:我们在 VS 调试命令背后有什么样的魔力?

我试图看看那里有什么,但我没有看到任何有用的东西:

docker run -dt -v "C:\Users\carlo\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\Progetti\prove\docker\API\WebApplication2:/app" -v "C:\Progetti\prove\docker\API:/src/" -v "C:\Users\carlo\.nuget\packages\:/root/.nuget/fallbackpackages2" -v "C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages2" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" -P --name WebApplication2 --entrypoint tail webapplication2:dev -f /dev/null

谢谢!

标签: windowsdockerasp.net-core

解决方案


将端口传递给docker run并不会以某种方式覆盖他正在运行的应用程序的端口。您要说的是,您希望容器上的端口 5000 在网络上暴露为端口 5000。但是,您的应用程序在 80 上运行,因此您一无所获。你需要-p 80:5000.

ASPNETCORE_URLS环境变量只是配置应用程序 URL 的一种方式https://+:443;http://+:80,默认情况下在容器中将绑定到该URL。再次将环境变量设置为相同的东西没有任何作用。您可以执行类似的操作http://+:5000,然后将内部端口更改为 5000 而不是 80,然后您的原始docker run命令就会起作用,因为端口 5000 上实际运行了一些东西。


推荐阅读