針對容器應用程式進行疑難排解
如果您的容器應用程式並未正確運作,檢閱 Azure 容器應用程式記錄和組態設定可能會顯示根本問題。 使用下列指南可協助您找出及檢視容器應用程式的詳細資料。
案例
下表列出在使用 Azure 容器應用程式時可能會遇到的問題,以及您可以採取的動作來解決這些問題。
案例 | 描述 | 動作 |
---|---|---|
所有案例 | 檢視記錄 診斷並解決問題 |
|
部署新修訂時發生錯誤 | 當您嘗試部署新的修訂時,收到錯誤訊息。 | 確認容器應用程式可以提取您的容器映像 |
佈建時間太長 | 部署新修訂之後,新修訂的 [佈建狀態] 為 [佈建中],且 [執行狀態] 為無限期 [處理中]。 | 確認健全狀態探查已正確設定 |
修訂已降級 | 新的修訂需要 10 分鐘以上的時間來佈建。 它最後的 [佈建狀態] 為 [已佈建],但 [執行狀態] 為 [已降級]。 [執行狀態] 工具提示會讀取 Details: Deployment Progress Deadline Exceeded. 0/1 replicas ready. |
確認健全狀態探查已正確設定 |
對端點的要求失敗 | 容器應用程式端點不會回應要求。 | 檢閱輸入設定 |
要求傳回狀態 403 | 容器應用程式端點回應要求並出現 HTTP 錯誤 403 (拒絕存取)。 | 確認網路設定正確 |
回應不如預期 | 容器應用程式端點回應要求,但回應不如預期。 | 確認流量已路由傳送至正確的修訂 將映像部署至容器登錄時,請確認您使用唯一標籤 |
遺漏參數錯誤 | 當您在 Azure CLI 中執行 az containerapp 命令,或從 Azure PowerShell 中的 Az.App 模組執行 Cmdlet 時,您收到有關遺漏參數的錯誤訊息。 |
確認已安裝最新版的 Azure 容器應用程式延伸模組 |
預覽功能無法使用 | 當您在 Azure CLI 中執行 az containerapp 命令時,無法使用預覽功能。 |
確認 Azure 容器應用程式延伸模組允許預覽功能 |
刪除您的應用程式或環境無法運作 | 此問題通常伴隨著一則訊息,例如 provisioningState:ScheduledForDelete。 | 手動刪除相關聯的 VNet |
檢視記錄
當您尋找容器應用程式的問題時,要採取的第一個步驟是檢視記錄訊息。 您可以檢視主控台和系統記錄檔的輸出。 容器應用程式的主控台記錄會擷取應用程式的 stdout
和 stderr
資料流。 容器應用程式會產生服務等級事件的系統記錄檔。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 區段下,選取容器應用程式的名稱。
- 在導覽列中,展開 [監視],然後選取 [記錄資料流] (而非 [記錄])。
- 如果 [記錄資料流] 頁面顯示「此修訂已調整為零。」,請選取 [移至修訂管理] 按鈕。 部署調整為最小複本計數 1 的新修訂。 如需詳細資訊,請參閱在 Azure 容器應用程式中調整。
- 在 [記錄資料流] 頁面中,將 [記錄] 設定 為 [主控台] 或 [系統]。
使用診斷並解決問題工具
您可以使用「診斷並解決問題」工具,找出容器應用程式的健康情況、組態和效能問題。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 區段下,選取容器應用程式的名稱。
- 在導覽列中,選取 [診斷並解決問題]。
- 在 [診斷並解決問題] 頁面中,選取其中一個 [疑難排解類別]。
- 選取導覽列中的其中一個類別,以尋找解決容器應用程式問題的方法。
確認容器映像的存取範圍
如果您在嘗試部署新的修訂時收到錯誤訊息,請確認容器應用程式能夠提取您的容器映像。
- 確定您的容器環境防火牆不會封鎖對容器登錄的存取。 如需詳細資訊,請參閱使用使用者定義的路由控制輸出流量。
- 如果您現有的 VNet 使用自訂 DNS 伺服器,而不是預設 Azure 提供的 DNS 伺服器,請確認 DNS 伺服器已正確設定,且容器登錄的 DNS 查閱並未失敗。 如需詳細資訊,請參閱 DNS。
- 如果您使用容器應用程式雲端建置功能來為您產生容器映像 (請參閱 Azure 容器應用程式的程式碼到雲端路徑,則無法公開存取您的映像,因此本節不適用。
針對可作為主控台應用程式執行的 Docker 容器,請在提升權限的命令提示字元中執行下列命令,以確認您的映像可公開存取。 執行命令之前,請以您的值取代以 <>
括住的預留位置。
docker run --rm <YOUR_CONTAINER_IMAGE>
確認 Docker 執行您的映像,而未報告任何錯誤。 如果您正在執行 Windows 上的 Docker,請確定您有 Docker 引擎正在執行。
如果您的映像無法公開存取,您可能會收到下列錯誤。
docker: Error response from daemon: pull access denied for <YOUR_CONTAINER_IMAGE>, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. See 'docker run --help'.
如需詳細資訊,請參閱 Azure 容器應用程式環境中的網路功能。
檢閱輸入設定
容器應用程式的輸入設定會透過一組規則強制執行,以控制將外部和內部流量路由傳送至容器應用程式。 如果您無法連線到容器應用程式,請檢閱這些輸入設定,以確定您的輸入設定不會封鎖要求。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 下,選取容器應用程式的名稱。
- 在導覽列中,展開 [設定],然後選取 [輸入]。
問題 | 動作 |
---|---|
是否啟用輸入? | 確認已選取 [已啟用] 核取方塊。 |
您要允許外部輸入嗎? | 確認 [輸入流量] 已設定為 [接受來自任何地方的流量]。 如果您的容器應用程式並未接聽 HTTP 流量,請將輸入流量設定為 [限制為容器應用程式環境]。 |
您的用戶端是否使用 HTTP 或 TCP 來存取容器應用程式? | 確認 [輸入類型] 已設定為正確的通訊協定 ([HTTP] 或 [TCP])。 |
您的用戶端是否支援 mTLS? | 確認 [用戶端憑證模式] 只有在用戶端支援 mTLS 時才設定為 [需要]。 如需詳細資訊,請參閱設定用戶端憑證驗證。 |
您的用戶端是否使用 HTTP/1 或 HTTP/2? | 確認 [傳輸] 已設定為正確的 HTTP 版本([HTTP/1] 或 [HTTP/2])。 |
目標連接埠是否已正確設定? | 確認 [目標連接埠] 已設定為容器應用程式正在接聽的相同連接埠,或容器應用程式 Dockerfile 所公開的相同連接埠。 |
您的用戶端 IP 位址是否遭到拒絕? | 如果 [IP 安全性限制模式] 未設定為 [允許所有流量],請確認您的用戶端沒有遭到拒絕的 IP 位址。 |
如需詳細資訊,請參閱 Azure 容器應用程式中的輸入。
確認網路設定
Azure 遞迴解析程式會使用 IP 位址 168.63.129.16
來解析要求。
- 如果您的 VNet 使用自訂 DNS 伺服器,而非由 Azure 提供的預設 DNS 伺服器,請將 DNS 伺服器設定為會將未解析的 DNS 查詢轉送至
168.63.129.16
。 - 設定 NSG 或防火牆時,請勿封鎖
168.63.129.16
位址。
如需詳細資訊,請參閱 Azure 容器應用程式環境中的網路功能。
確認健全狀態探查組態
針對使用 TCP 作為傳輸的所有健全狀態探查類型 (活躍度、整備程度和啟動),請確認其連接埠號碼符合您為容器應用程式設定的輸入目標連接埠。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 下,選取容器應用程式的名稱。
- 在導覽列中,展開 [應用程式],然後選取 [容器]。
- 在 [容器] 頁面中,選取 [健全狀態探查]。
- 展開 [活躍度探查]、[整備程度探查] 和 [啟動探查]。
- 針對每個探查,請確認 [連接埠] 值是否正確。
更新 [連接埠] 值,如下所示:
- 選取 [編輯並部署] 以建立新的修訂。
- 在 [建立並部署新的修訂] 頁面中,選取容器映像旁的核取方塊,然後選取 [編輯]。
- 在 [編輯容器] 視窗中,選取 [健全狀態探查]。
- 展開 [活躍度探查]、[整備程度探查] 和 [啟動探查]。
- 針對每個探查,編輯 [連接埠] 值。
- 選取儲存按鈕。
- 在 [建立並部署新的修訂版本] 頁面中,選取 [建立] 按鈕。
設定延長啟動時間的健全狀態探查
如果啟用輸入,則如果未針對每個類型定義任何探查,則會自動將下列預設探查新增至主要應用程式容器。
以下是每個探查類型的預設值。
屬性 | 啟動 | 準備就緒 | 活躍度: |
---|---|---|---|
通訊協定 | TCP | TCP | TCP |
連接埠 | 輸入目標連接埠 | 輸入目標連接埠 | 輸入目標連接埠 |
Timeout | 3 秒 | 5 秒鐘 | n/a |
期間 | 1 秒 | 5 秒鐘 | n/a |
初始延遲 | 1 秒 | 3 秒 | n/a |
成功閾值 | 1 | 1 | n/a |
失敗閾值 | 240 | 48 | n/a |
如果您的容器應用程式需要較長的時間才能啟動 (這在 JAVA 中很常見),您可能需要據以自訂即時和整備程度探查 [初始延遲 (秒)] 屬性。 您可以檢視記錄,以查看容器應用程式的一般啟動時間。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 下,選取容器應用程式的名稱。
- 在導覽列中,展開 [應用程式],然後選取 [容器]。
- 在 [容器] 頁面中,選取 [健全狀態探查]。
- 選取 [編輯並部署] 以建立新的修訂。
- 在 [建立並部署新的修訂] 頁面中,選取容器映像旁的核取方塊,然後選取 [編輯]。
- 在 [編輯容器] 視窗中,選取 [健全狀態探查]。
- 展開 [活躍度探查]。
- 如果選取了 [啟用活躍度探查],請增加 [初始延遲 (秒)] 的值。
- 展開 [整備程度探查]。
- 如果選取了 [啟用整備程度探查],請增加 [初始延遲 (秒)] 的值。
- 選取 [儲存]。
- 在 [建立並部署新的修訂版本] 頁面中,選取 [建立] 按鈕。
然後,您可以檢視記錄,以查看容器應用程式是否成功啟動。
如需詳細資訊,請參閱健全狀態探查。
確認流量已路由傳送至正確的修訂
如果您的容器應用程式未如預期般運作,問題可能是要求會路由傳送至過時的修訂。
- 登入 Azure 入口網站。
- 在 [搜尋] 列中,輸入您的容器應用程式名稱。
- 在 [資源] 下,選取容器應用程式的名稱。
- 在導覽列中,展開 [應用程式],然後選取 [修訂]。
如果 [修訂模式] 設定為 Single
,則預設會將所有流量路由傳送至最新的修訂。 [使用中修訂] 索引標籤應該只列出一個修訂,且 [流量] 值為 100%
。
如果 [修訂模式] 設定為 Multiple
,請確認您未將流量路由傳送至過期的修訂。
如需設定流量分割的詳細資訊,請參閱 Azure 容器應用程式中的流量分割。
確認已安裝最新版的 Azure 容器應用程式延伸模組
如果您在 Azure CLI 中執行 az containerapp
命令或 Azure PowerShell 模組中的 Cmdlet Az.App
時收到遺漏參數的錯誤,請確定您已安裝最新版的 Azure 容器應用程式延伸模組。
az extension add --name containerapp --upgrade
確認 Azure 容器應用程式延伸模組允許預覽功能
如果您在 Azure CLI 中執行 az containerapp
命令時無法使用預覽功能,請在 Azure 容器應用程式延伸模組上啟用預覽功能。
az extension add --name containerapp --upgrade --allow-preview true
手動刪除 Azure Container Apps 環境所使用的 VNet
如果您收到訊息 provisioningState:ScheduledForDelete,但您的環境無法實際刪除,請務必手動刪除相關聯的 VNet。
識別您嘗試刪除的環境所使用的 VNet。 將 <PLACEHOLDERS> 取代為您的值。
az containerapp env show --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT>
在輸出中,尋找
infrastructureSubnetId
並記下 VNet 識別符。 範例 VNet 識別子為vNet::myVNet.id
。手動刪除 VNet:
az network vnet delete --resource-group <RESOURCE_GROUP> --name <VNET_ID>
刪除 Azure Container Apps 環境:
az containerapp env delete --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT> --yes