簡體   English   中英

為什么在 Visual Studio 中結束調試后我的 docker 容器 ASP.NET 核心應用程序不可用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM