visual-studio - 如何使用 Visual Studio 2019 构建和运行 docker 映像?
问题描述
我有一个基于 ASP.NET Core 3.1 框架编写的 Web API 应用程序,我想使用 docker 运行它。当我使用 docker 单击“运行”时,Visual Studio 失败并将以下内容记录到调试窗口中。
C:\Users\myusername.nuget\packages\microsoft.visualstudio.azure.containers.tools.targets\1.9.10\build\Container.targets(198,5):错误 CTC1003:Visual Studio 容器工具需要 Docker 才能运行
在查看该错误之前的日志时,我可以看到 VS 正在尝试使用以下命令运行 docker 映像
docker run -dt -v "C:\Users\myusername\vsdbg\vs2017u5:/remote_debugger:rw" -v "C:\WinProjects\ProjectName\ProjectName:/app" -v "C:\WinProjects\ProjectName:/src" -v "C:\Users\myusername\AppData\Roaming\Microsoft\UserSecrets:/root/.microsoft/usersecrets:ro" -v "C:\Users\myusername\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro" -v "C:\Users\myusername\.nuget\packages\:/root/.nuget/fallbackpackages2" -v "C:\Program Files\dotnet\sdk\NuGetFallbackFolder:/root/.nuget/fallbackpackages" -e "DOTNET_USE_POLLING_FILE_WATCHER=1" -e "ASPNETCORE_ENVIRONMENT=Development" -e "ASPNETCORE_URLS=https://+:443;http://+:80" -e "NUGET_PACKAGES=/root/.nuget/fallbackpackages2" -e "NUGET_FALLBACK_PACKAGES=/root/.nuget/fallbackpackages;/root/.nuget/fallbackpackages2" -P --name ProjectName --entrypoint tail projectname:dev -f /dev/null
但是该命令会引发以下错误
docker:来自守护进程的错误响应:无效的卷规范:'C:\Users\myusername\AppData\Roaming\ASP.NET\Https:/root/.aspnet/https:ro'。
如何解决此问题并从 Visual Studio 2019 运行 Docker 映像?
在 Visual Studio 中使用Package Manager Console
,以下命令可以正常工作。
docker ps
docker-machine status
我不明白为什么 Visual Studio 会抛出error CTC1003: Visual Studio container tools require Docker to be running
我还执行ps kill
了通过运行找到的所有图像docker ps
。我也跑去docker system prune -a
收拾东西。但仍然是同样的问题。
此外,我将docker-compose
项目添加到我的解决方案中。当它运行时,我收到以下错误
-------------------------------------------------------------------
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
-------------------------------------------------------------------
It was not possible to find any installed .NET Core SDKs
Did you mean to run .NET Core SDK commands? Install a .NET Core SDK from:
https://aka.ms/dotnet-download
The target process exited without raising a CoreCLR started event. Ensure that the target process is configured to use .NET Core. This may be expected if the target process did not run on .NET Core.
The program 'dotnet' has exited with code 145 (0x91).
解决方案
Docker 是一个轻量级的 VM 解决方案,用于部署某些类型的项目进行测试。看起来您需要让 Docker Desktop 在该机器上运行,然后才能部署/调试 Web API。
一旦你运行了一个 Docker 实例,你就可以运行/调试它。
所以我的问题是:1)这是在物理机还是虚拟机上运行?它有所不同,因为您需要运行 Hyper V 才能在 Windows 上使用 Docker,并且您不能(至少我无法)在 VM 中运行 Hyper V。2)您是否下载并运行了 Docker Desktop 安装?
这是链接:https ://hub.docker.com/?overlay=onboarding
注意:安装 Docker 时,请确保选择使用 Linux 容器,而不是 Windows……我无法让它与所选的 Windows 容器一起使用。
当您创建项目时,它应该已经下载了 docker 进行安装,但可能发生了一些事情。安装后,它会在您重新启动时运行,除非您告诉它不要这样做。
埃里克
推荐阅读
- apache-spark - Apache Spark Executors Dead - 这是预期的行为吗?
- javascript - 如何正确遍历大型二维数组并将其数组传递到方法中的结果记录下来
- r - date_decimal 的问题
- c++ - Boost.Python - 参数化构造函数出错
- dataframe - 访问数据框信息并使用 ddply 或类似的东西来执行某些功能
- c# - 如何使用多个条件过滤数据
- reactjs - 为什么我在 React 中的 clearInterval 不起作用?
- wso2 - SLO 与 WSO2 IS
- java - 数据库中的日期时间类型以 json 格式的数组形式出现,我怎样才能让它以字符串的形式出现?
- c# - 将不同字符串添加到同一列表中的对象的正确方法是什么?