Docker容器环境下ASP.NET Core Web API应用程序的调试
本文主要介紹通過Visual Studio 2015 Tools for Docker – Preview插件,在Docker容器環(huán)境下,對ASP.NET Core Web API應(yīng)用程序進行調(diào)試。在自己做實驗的過程中也碰到了一些問題,經(jīng)過一些測試和搜索資料,基本解決了這些問題,本文也會對這些問題進行介紹,以免有相同需求的朋友多走彎路。
插件的下載與安裝
至撰寫本文為止,Visual Studio 2015 Tools for Docker插件還是處于Preview的版本(版本號:0.31.0),可以點擊此處下載。要正確安裝此插件并能夠成功地在Visual Studio 2015中使用該插件進行調(diào)試,需要滿足以下先決條件:
Microsoft Visual Studio 2015 Update 3
Enterprise
Professional
Community
Microsoft .NET Core 1.0 SDK for Windows以及VS 2015 Tooling Preview 2
Windows系統(tǒng)已經(jīng)安裝Docker for Windows或者Docker Toolbox
本文將以VS 2015 Enterprise + Windows 10 + Docker for Windows作為開發(fā)環(huán)境進行介紹。
下載插件后,即可按照正常的軟件安裝過程進行安裝。安裝過程請退出Visual Studio 2015。安裝成功后,可以在Visual Studio的“擴展與更新”中找到Visual Studio 2015 Tools for Docker – Preview:
在ASP.NET Core Web API項目上啟用Docker的支持
打開我們的DockerWebAPI項目,在項目上單擊鼠標右鍵,然后選擇“添加 –>? Docker Support” 菜單:
經(jīng)過一段時間,VS Tools for Docker就會在項目上添加一些文件:
我們暫時先不詳細介紹這些文件的具體內(nèi)容和作用。基本上在Properties目錄下是給Visual Studio 2015和編譯環(huán)境所使用的;而docker-compose以及Dockerfile都是給Docker所使用的,需要了解詳細信息的朋友,可以先上網(wǎng)搜索了解一下。
開始調(diào)試ASP.NET Core Web API應(yīng)用程序
在開始調(diào)試以前,請首先打開Docker for Windows的設(shè)置,在Shared Drivers里,把項目所在的驅(qū)動器勾選上。如果這步?jīng)]有做,那么就無法成功啟動調(diào)試器。
接下來,直接按下F5快捷鍵,就可以開始調(diào)試了。當然,也可以按下工具欄上的“啟動”按鈕來啟動調(diào)試,可以看到,我們的調(diào)試按鈕已經(jīng)默認設(shè)置為Docker了:
Visual Studio 2015啟動Debugger的過程大致如下:
調(diào)用PowerShell腳本DockerTask.ps1,對環(huán)境進行清理,比如停止正在運行的容器,以及將已有的Docker Image刪除
Visual Studio對項目進行編譯
調(diào)用PowerShell腳本DockerTask.ps1,將項目發(fā)布到bin/Docker/Debug/app目錄
開始根據(jù)docker-compose.debug.yml的文件內(nèi)容,生成Docker Image
啟動Visual Studio Debugger,通過不斷地ping http://localhost/api/values 端點,確保Docker Container已經(jīng)成功加載
打開默認瀏覽器,開始調(diào)試,等待斷點命中
需要注意的是,VS Tools for Docker默認使用80端口,如果系統(tǒng)中已經(jīng)安裝有使用80端口的服務(wù),比如IIS,請要么停止占用80端口的服務(wù),要么修改項目中的yml文件,選擇使用其它的端口。否則編譯過程將無法完成。另一個需要注意的地方是,由于在上一次的案例中,我們通過UseUrls API指定了我們的應(yīng)用程序可以接受來自任何地址的5000端口的請求,因此,我們也需要相應(yīng)地修改docker-compose.debug.yml文件,使其能夠?qū)⒅鳈C的80端口映射到5000端口,如下:
成功啟動調(diào)試器之后,即可設(shè)置斷點,待斷點命中時,可以像調(diào)試普通C#應(yīng)用程序那樣,使用Visual Studio提供的各種調(diào)試體驗。從下圖可以看出,我們的調(diào)試上下文已經(jīng)是在Docker容器中了(Environment.MachineName返回了Docker Container的ID):
有關(guān)自動生成的Docker Image
在Visual Studio Tools for Docker完成項目的編譯之后,會生成一個名稱為“username/xxxx: Debug”的Docker Image(xxxx為項目名稱):
既然是一個Docker Image,那么我們應(yīng)該可以使用docker run命令,在容器中執(zhí)行這個Docker Image。現(xiàn)在我們來嘗試一下:
發(fā)現(xiàn)并沒有執(zhí)行成功,提示了一個bash的錯誤:integer expression expected。此時也無法從瀏覽器訪問這個應(yīng)用程序。經(jīng)過一段時間的研究,發(fā)現(xiàn)在Dockerfile.debug文件的最后一條ENTRYPOINT指令處,將:
?
| 1 | ENTRYPOINT [ "/bin/bash" , "-c" , "if [ \"$REMOTE_DEBUGGING\" -eq 0 ]; then dotnet DockerWebAPI.dll; else sleep infinity; fi" ] |
改為:
?
| 1 | ENTRYPOINT [ "/bin/bash" , "-c" , "if [[ \"$REMOTE_DEBUGGING\" -eq 0 ]]; then dotnet DockerWebAPI.dll; else sleep infinity; fi" ] |
(if后面的子句使用兩個雙括號)。
此時再次編譯運行,調(diào)試過程也不會有什么問題,再次通過命令行執(zhí)行新生成的Docker Image,可以看到,這個錯誤已經(jīng)修復(fù):
其實這只是我在使用VS Tools for Docker的一個小發(fā)現(xiàn),并沒有太大的實際意義:
在Debug模式,如果不修復(fù)這個問題,Debugger照樣可以啟動
在Release模式,Dockerfile根本就沒有這條指令(因為Release模式下只需要正常啟動應(yīng)用程序就可以了)
反正在此也把這個心得分享出來,或許也能幫到有著同樣疑惑的朋友。
總結(jié)
本文對Visual Studio Tools for Docker進行了簡單的介紹。在后續(xù)的文章中,我還會繼續(xù)介紹一些Docker的使用心得,并同時介紹一些ASP.NET Core Web API的開發(fā)經(jīng)驗。
原文地址:http://www.cnblogs.com/daxnet/p/5793479.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
贊賞
人贊賞
總結(jié)
以上是生活随笔為你收集整理的Docker容器环境下ASP.NET Core Web API应用程序的调试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 16.04下ASP.NET
- 下一篇: Opserver开源的服务器监控系统(A