容器化 ASP.NET Core Web API 应用程序的正确方法

问题描述 投票:0回答:1

我使用 Visual Studio 的“ASP.NET Core Web API”项目模板编写了一个最小的 API。它非常简单,并且与 SQL Server 数据库交互。

我想使用 Docker 将应用程序容器化,这样我就可以将应用程序部署到云机器上。

目前,我正在使用 Visual Studio 的“Docker”构建选项(绿色播放按钮)。当我以这种方式构建它时,它会创建并运行 docker 容器,一切都按预期工作,可以使用 localhost:port 访问 Swagger UI。问题是当我尝试在不使用 Visual Studio 的情况下运行容器(即手动调用 docker run)时,没有任何功能按预期运行。我无法通过本地主机访问 Swagger UI 或应用程序的任何其他部分。

请注意,这是在使用(我认为是)Visual Studio 正在使用的完全相同的 docker run 命令时,因为我从 Visual Studio“容器工具”输出中复制了该命令。

我使用的命令是

docker run -dt -v "C:\Users\[User]\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\Users\[User]\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\[User]\AppData\Roaming\Microsoft\UserSecrets:/home/app/.microsoft/usersecrets:ro" -v "C:\Users\[User]\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -v "C:\Users\[User]\AppData\Roaming\ASP.NET\Https:/home/app/.aspnet/https:ro" -v "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\tools\TokenService.Proxy\linux-x64\net6.0:/TokenService.Proxy:ro" -v "C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Sdks\Microsoft.Docker.Sdk\tools\HotReloadProxy\linux-x64\net6.0:/HotReloadProxy:ro" -v "C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\HotReload:/HotReloadAgent:ro" -v "C:\Users\[User]\source\repos\KPFIrmwareApiApp\KPFirmwareAPI:/app" -v "C:\Users\[User]\source\repos\KPFIrmwareApiApp:/src/" -v "C:\Users\[User]\.nuget\packages\:/.nuget/fallbackpackages2" -v "C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages:/.nuget/fallbackpackages" -e "ASPNETCORE_LOGGING__CONSOLE__DISABLECOLORS=true" -e "ASPNETCORE_ENVIRONMENT=Development" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "NUGET_PACKAGES=/.nuget/fallbackpackages2" -e "NUGET_FALLBACK_PACKAGES=/.nuget/fallbackpackages;/.nuget/fallbackpackages2" -P --name KPFirmwareAPI --entrypoint tail kpfirmwareapi:dev -f /dev/null 

感谢您的帮助!

asp.net docker visual-studio containers
1个回答
0
投票

当您在 Visual Studio 中运行时(尤其是在调试配置中),它会进行大量优化以加快调试速度。您可以在 docs

中阅读有关它们的信息

对于您的具体情况,您需要简化为:

docker run -dt -v "C:\Users\[User]\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\[User]\AppData\Roaming\Microsoft\UserSecrets:/home/app/.microsoft/usersecrets:ro" -v "C:\Users\[User]\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -v "C:\Users\[User]\AppData\Roaming\ASP.NET\Https:/home/app/.aspnet/https:ro" -e "ASPNETCORE_ENVIRONMENT=Development" -P --name KPFirmwareAPI kpfirmwareapi

我在命令中留下的卷和环境变量允许您利用为您制作的工具进行本地测试的证书。如果您不需要 SSL,您可以删除它们。

注意:您还需要构建完整的镜像(kpfirmwareapi:dev 仅用于调试),您可以在 VS 中右键单击 Dockerfile 并选择“构建 Docker 镜像”来完成此操作:

© www.soinside.com 2019 - 2024. All rights reserved.