上篇博文中分享了如何用docker-compose搭建AspNetCore的開發(fā)環(huán)境,在開發(fā)過程中debug是必不可少的,如果你使用VS2017的話,右鍵就可以了,而作為跨平臺的.net core開發(fā)的時候卻要依賴VisualStudio,那一定算不上真正的跨平臺,而且不是所有人都能買得起VS的許可證,買得起windows的授權(quán),(我知道很多人都沒買過:)所以這次來分享一下如何使用vscode在docker中debug。
我們知道vscode是可以遠(yuǎn)程debug的,參考OminiSharp的Wiki,其原理就是在服務(wù)器上安裝.NetCore命令行調(diào)試工具VSDBG
,然后本地vscode通過ssh隧道建立和服務(wù)器之間的連接,控制服務(wù)器上的VSDBG
進(jìn)行斷點調(diào)試。
根據(jù)遠(yuǎn)程debug的啟發(fā),我們可以在docker中安裝VSDBG
,vscode訪問容器中的VSDBG
進(jìn)行斷點調(diào)試,原理和上面的遠(yuǎn)程debug一樣,區(qū)別在于可以直接訪問容器而不需要ssh。
首先通過命令
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
記得2個月之前用這個命令無法安裝的VSDBG
,因為里面的工具包下載不了,只能手動把對應(yīng)版本的工具包下載下來,然后上傳到自己的文件服務(wù)器,再替換腳本中的下載地址,折騰的好煩人?,F(xiàn)在可以直接下載了,非常開心??。
在容器中安裝VSDBG
,具體的Dockerfile如下:
FROM microsoft/aspnetcore:1.1.1ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \ && apt-get update \ && yes | apt-get install curl unzip \ && curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbgWORKDIR /app VOLUME /app ENV ASPNETCORE_ENVIRONMENT Development ENTRYPOINT ["dotnet", "Web.dll"]
在vscode中項目根目錄下的.vscode
文件夾中的lunch.json
的configurations
節(jié)點中追加一個debug配置:
{ "name": ".NET Core Remote Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "bash", "pipeArgs": [ "-c", "docker exec -i 你的容器名稱 ${debuggerCommand}" ], "debuggerPath": "/root/vsdbg/vsdbg", "pipeCwd": "${workspaceRoot}", "quoteArgs": true }, "sourceFileMap": { "/app": "${workspaceRoot}" }, "justMyCode": true}
主機(jī)是通過docker exec -i 你的容器名稱 ${debuggerCommand}
命令和容器進(jìn)行交互的,不了解docker exec
的可以去查看一下文檔。
"sourceFileMap": { "/app": "${workspaceRoot}" },
sourceFileMap映射容器中程序所在的路徑,這里就是之前Dockerfile中的WORKDIR
的路徑。
那么現(xiàn)在咱們dotnet publish -c Debug src/Web/Web.csproj
發(fā)布這個項目,然后Build容器,docker build -t myweb
,接著docker run -t -name MyDebugWeb myweb
,現(xiàn)在容器已經(jīng)運行了,在vscode中的Deubg中選擇剛才新建的.NET Core Remote Attach
F5進(jìn)入Debug模式,在程序中設(shè)置一個斷點,當(dāng)程序運行到這里的時候就變黃了,
和VisualStudio一摸一樣。
當(dāng)然也可以不用單獨build這個容器,直接放在之前講的docker-compose中,效果也是一樣的。
http://www.cnblogs.com/kexxxfeng/p/7151325.html