如何让docker工具箱与.net core 2.0项目一起工作

时间:2017-08-24 19:46:40

标签: c# docker asp.net-core visual-studio-2017 microservices

尝试在我的.NET核心2.0项目中使用Docker功能时遇到错误。我收到了一条错误消息

  

Visual Studio容器工具要求之前运行Docker   建立,调试或运行集装箱化项目。有关更多信息,   请参阅:http://aka.ms/DockerToolsTroubleshooting

我按照链接,一旦意识到我有Windows 10 Home x64,并且不得不安装Docker Toolbox,而不是Docker For Windows。现在它安装了名为

的可执行文件
  

Docker快速入门终端

这是应该启动docker服务的方式吗?我试过运行这个可执行文件,它似乎正在工作。我的容器正在运行,但Visual Studio容器工具的错误仍然存​​在。

我错过了什么?为了在Visual Studio 2017中使用Docker容器支持,是否有高于Home所需的Windows版本?

更新:

我试图遵循Quetzcoatl的建议,我在视觉工作室中仍然遇到有关这些工具的相同错误。这是我在Docker快速启动终端中运行的内容。我尝试在Visual Studio成功打开项目后构建项目,并且仍然收到有关容器工具的上述错误。

我的devenv.exe文件位于

  

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ Common7 \ IDE \ devenv.exe

我的解决方案文件位于

  

D:\ Development \ Visual Studio \ Musify2 \ Musify2 \ Musify2.sln

enter image description here

更新2:

我运行了一些建议的命令,在docker quickstart终端中尝试,这里是这些命令的结果quetz enter image description here

2 个答案:

答案 0 :(得分:18)

使用Docker Toolbox有点棘手,但实际上核心2.0在这里无关。这都是关于docker,docker-toolbox和VS的。

首先:

  

这是应该启动docker服务的方式吗?我试过运行这个可执行文件,它似乎正在运行。

是的。如果docker机器/服务正在运行 - 这很好!

现在,你必须意识到在docker中,通常,有关docker运行方式/位置的信息保存在环境变量中。 quickstart脚本不仅为您启动docker-machine并检查一些基本的东西,它还设置了几个环境变量,以便稍后所有命令如dockerdocker-compose等知道在哪里寻找docker虚拟机。在您/我们的情况下,该信息主要包括VM的IP和Docker侦听的端口号。

..并且您的Visual Studio不知道这一点,因为,我打赌,您已经从StartMenu或桌面图标运行VisualStudio或双击解决方案文件,因此它没有机会获得来自quickstart控制台的环境变量。

解决方案非常简单:确保VS获取该信息。也就是说,确保它获得环境变量,确保它获得新鲜状态,因为IP /端口有时可能会波动。因此,不要只将它们复制到您的操作系统设置,因为没有任何东西可以自动刷新它们。

我找到的最简单的方法是关闭Visual Studio,运行docker toolbox quickstart console,然后从该控制台中运行VisualStudio ,例如,对于我的VS2017 Community Edition:

Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
(.......snip..........)


                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/

docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

Start interactive shell
quetzalcoatl@LAP049 MINGW32 ~
$ /c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/Common7/IDE/devenv.exe C:\\PATH\\TO\\MY\\SOLUTION.sln

即使使用TAB完成,写入的路径也很长,所以通常会为我运行一个小的.sh脚本。

顺便说一句!请注意,DEVENV的路径必须类似于unix(/c/Program\ Files...),因为mingw shell必须理解,而SOLUTION的路径必须是正常的Windows路径(c:\projects\foo\bar\..),因为VisualStudio会尝试在启动后阅读。

答案 1 :(得分:13)

这就是我在2017年使用docker-toolbox在windows 10上工作时所做的。你遵循这个,我保证它会工作。请注意,这仅适用于不支持Windows应用程序的本机docker的Windows 10主页:

  1. 在w10 home上安装docker-toolbox

  2. 运行docker QuickStart终端一次以创建docker-machine。这需要一段时间。因此,在分配IP地址和其他内容时请耐心等待

  3. 一旦完成,它将显示一个命令提示符。输入'docker-machine ip default'。记下IP地址,因为你以后需要它

  4. 关闭QuickStart终端窗口。这只是将一个小型Ubuntu Linux服务器的boot2docker.iso映像初始化为virtualbox app(又名docker-machine又名默认vm)。如果您不熟悉虚拟化技术或oracle virtualbox停止阅读并首先阅读它们然后重新开始。但如果你这样做,那么很乐意继续

  5. 正如我所提到的,您的docker-machine实例是一个Linux虚拟机,因此很明显您只能打开使用.net核心技术构建的项目。不幸的是,对于完整的.net框架,您需要运行Windows容器,这些容器仅在Windows 10 pro上可用,或者在虚拟机上构建您自己的Windows nano服务器或2016服务器虚拟机,然后在dockers网站上使用并按照本地docker for windows的步骤操作。从这里开始,这个答案的其余部分将对那些只想在Linux vm / docker-machine上运行核心项目的人有所帮助

  6. 在管理员模式下打开Windows power shell并输入“docker-machine ls”以确认默认vm正在运行。也可以执行'docker-machine status default',它应该返回'running'

  7. 现在打开运行默认虚拟机的虚拟机应用程序,然后单击设置。打开“共享驱动器”选项卡,您需要确保主机上的“c:\ Users”文件夹在vm中映射/挂载为“c / Users”文件夹。请注意,此步骤非常重要,缺少它会导致成功运行时遇到很多麻烦

  8. 还快速说明您的解决方案/项目/代码库必须保存在“c:\ Users \”下,以使其正常工作。这是如果你想使用它OOTB。我不想浪费时间尝试在允许的路径之外安装文件夹。但如果你是喜欢冒险的人,请务必试着弄明白并告诉我们你是怎么做的

  9. 现在正如Quetzalcoatl正确提到的vs需要知道这个docker-machine。发生的唯一方法是设置环境变量。因此,继续运行此命令'docker-machine env default |在PowerShell窗口中调用“表达式”。这是使得vs使用docker-machine

  10. 表现得很好的魔术酱
  11. 通过dbl单击项目解决方案或创建新项目/解决方案来正常打开。在Powershell中使用' start'命令打开现有vs解决方案或新vs实例。专业提示:如果您创建新解决方案,请勿在选择项目模板类型时选择Linux docker选项。一旦您的解决方案全部设置并准备就绪,您就可以完全添加docker支持。事实上,不加以控制,让vs创建你的解决方案。通过这种方式,您将有机会在IIS Express或自托管模式下构建和运行解决方案,以查看您的core2.0是否正常运行

  12. 一旦确定一切正常并且您现在看到了OOTB主页,就可以通过单击您的项目添加docker支持,将鼠标悬停在Add上,然后单击“Add Docker Support”。这将创建一个新的docker项目(.dcproj)并添加一堆docker相关文件

  13. 现在我不打算在这里讨论docker的细节但是你会注意到你的项目不再是启动和新创建的docker项目了。这是完全正常和预期的行为。这意味着您已经准备好并准备使用docker容器启动您的应用程序。所以继续点击“Docker”按钮,看看你的努力终于得到了回报。再次耐心,因为构建图像和旋转容器需要一段时间,但一旦完成,vs将启动并附加调试器

  14. 在这里,您将再次感到失望并感到毫无价值,因为当浏览器打开新窗口或标签页时,会出现页面无法访问的错误。原因是浏览器地址指向localhost,而不再是Web服务器。您的“Web服务器”现在是您的docker容器,因此您需要将localhost替换为您在上面检索的IP地址。端口号保持不变。提交页面后,您将感到欣慰并欣喜若狂地看到主页/路由工作。这也应该启用调试,如果由于某种原因它没有,那么您可能需要删除c:\ Users \文件夹中名为.vsdbg的文件夹并重新运行该应用程序。