[英]After a Windows Crash, ASP.NET Core App Is No Longer Accessible Docker Desktop (Visual Studio 2022)
[英]why is my docker container ASP.NET core app not available after ending debugging in Visual Studio
我的標題解釋了其中的大部分內容,但想了解為什么當我在 Visual Studio 中調試時我可以訪問https://localhost:32770/並獲取我的 API 端點,但當我結束調試時它變得不可用。
我目前正忙着花幾天時間來研究 Docker 和 Kubernetes,這讓我有點難過,我真的很想填補我的知識空白。
容器在創建后仍然運行,那么發生了什么變化?
我注意到這是在構建開始時運行的:
docker exec -i 0f855d9b4c801bf8c52da48e6dd02ffdf0fe7242fde22fb9a221616e4b2900f9 /bin/sh \
-c "if PID=$(pidof dotnet); then kill $PID; fi"
但我看不出這會如何改變調試結束后發生的情況,此時是在 dockerfile 運行之前。 我不明白命令中的 -c ,但我明白引號中的腳本在容器中運行后遵循docker exec
syntax docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
。 似乎這個腳本在創建新的代碼之前殺死了現有的代碼構建。
這是在 dockerfile 運行之前運行的
docker build -f "F:\Dev\API_files\API_name\Dockerfile"
--force-rm
-t API_name:dev
--target base
--label "com.microsoft.created-by=visual-studio"
--label "com.microsoft.visual-studio.project-name=API_name" "F:\Dev\API_name"
我在這里看不到任何會改變容器運行方式的東西,根據docker build --help
接下來運行 dockerfile,它幾乎是 ASP.NET 核心應用程序的默認設置,它具有
EXPOSE 80
EXPOSE 443
和 rest 是簡單的構建步驟。 畢竟,我似乎找不到太多跡象表明發生了什么。 我的猜測是它與 IIS Express 有關,但我真的不知道它發生了什么以及視覺工作室何時調試。 當我調試為 docker 容器打開 localhost 端口時,幕后正在運行什么?
編輯:我發現一個 docker 運行命令可能與它有關,但可能不是。 docker 運行命令具有-P
標志以“將所有暴露的端口發布到隨機端口”但容器永遠不會停止運行,所以我是否應該無法找到這些端口並連接到 API?
在調試過程中,如果您運行此命令:
docker exec -it containerName bash -c 'pidof dotnet'
您會注意到,dotnet 進程正在運行,當您停止調試並再次運行它時,您將看到該進程已完成。
如果要在容器中啟動應用程序,無需再次運行調試器,只需在容器內運行啟動dotnet
進程即可。
你可以這樣做,運行這樣的腳本:
#Set these 3 variables
$containerName = "MyContainer"
$appDll = "myApp.dll"
$appDirectory = "/app/bin/debug/netcoreapp3.1"
$args = "/c docker exec -it $containerName bash -c 'cd $appDirectory;dotnet $appDll'"
Start-Process -FilePath "powershell" -ArgumentList $args -NoNewWindow
您可以通過再次運行此腳本來檢查它是否有效:
docker exec -it containerName bash -c 'pidof dotnet'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.