我花了一個多星期的時間讓 Windows 容器與 Azure 應用程式服務一起運作。我最初的偏好是僅使用標準容器實例,但似乎您只能選擇公共或專用網絡,而不是自訂(與 Linux 容器不同)。看起來,如果您在應用程式服務中執行 Windows 容器,您將獲得與其他網站相同的網路選項。 Azure 對應用程式服務中的 Windows 容器的支援是快一歲了,但除了非常基本的場景之外,解決這個問題的資源相對較少。
我使用容器的目的是按需執行第三方後台 Windows 服務,而不需要虛擬機器的開銷。由於它使用應用程式服務,我決定新增一個 ASP.NET Core Rest 端點來取得一些狀態資訊。我的容器是基於mcr.microsoft.com/windows/servercore:ltsc2019
.我下載並安裝 .net 和 asp.net core(基本映像僅具有 .net 框架),安裝我的服務,構建並運行網站,然後我的入口點是一個 Powershell 腳本,它更新一些配置值並運行 asp.管理服務的net core 端點。
如果我使用該門戶,我可以選擇容器與程式碼、Windows 與 Linux 的選項,並從以下開始基本快速入門圖像,但我自己在 Azure 容器註冊表中的映像無法正常啟動。我正在使用其中之一支援的基礎圖像,並且它在我的本地計算機上運行良好。在 Azure 上,它創建了一切,但它永遠不會啟動。少量的日誌記錄表明它啟動,安裝文件共享卷,然後基本上就死掉了:
- 建立映像容器
- 嘗試啟動容器
- 啟動容器成功
- 容器已啟動
- 呼叫配置容器實用程式
- 配置容器實用程式已完成
- 容器已啟動
- 試著停止容器
- 嘗試終止容器
- 嘗試移除容器
- 容器已成功移除
同樣奇怪的是,即使使用快速入門圖像,我也沒有看到實際的容器實例。據推測,這是因為它直接在應用程式服務計劃中運行,儘管這些都不是很清楚。從Web 應用程式中,我可以轉到應用程式服務計劃(Windows 容器計劃),其中在“應用程式”下,它顯示一個類型為“應用程式、容器、Windows”的應用程序,但我無法找到查看控制台日誌或像我一樣使用 Container Image 類型的資源來執行 shell。在我遇到的一些螢幕截圖中,我可以在「設定」下看到一個「容器設定」鏈接,但我沒有,但由於某種原因,這可能僅適用於 Linux 容器。
那麼,在應用程式服務中運行時,我應該如何解決容器問題?我在某處遺漏了什麼嗎?
答案1
診斷
點擊Diagnose & Solve Problems -> Container Initialization
“Azure Web App for Containers”,您可以找到有價值的偵錯資訊。
捻角羚
應用程式服務附帶一個調試控制台,可用於調試、瀏覽、上傳文件,還附帶 JSON 端點,用於獲取有關環境的資訊。該控制台稱為 Kudu 控制台或應用程式的 SCM 儀表板。
您可以透過連結 https:// 存取此儀表板[您的應用程式名稱].scm.azurewebsites.net/。
Kudu 提供的一些功能包括:
- 應用程式日誌流診斷轉儲偵錯控制台的環境設置,您可以在其中執行 PowerShell cmdlet 和基本 DOS 命令。
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-performance-degradation