共用方式為


針對容器應用程式進行疑難排解

如果您的容器應用程式並未正確運作,檢閱 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

檢視記錄

當您尋找容器應用程式的問題時,要採取的第一個步驟是檢視記錄訊息。 您可以檢視主控台和系統記錄檔的輸出。 容器應用程式的主控台記錄會擷取應用程式的 stdoutstderr 資料流。 容器應用程式會產生服務等級事件的系統記錄檔

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 區段下,選取容器應用程式的名稱。
  4. 在導覽列中,展開 [監視],然後選取 [記錄資料流] (而非 [記錄])。
  5. 如果 [記錄資料流] 頁面顯示「此修訂已調整為零。」,請選取 [移至修訂管理] 按鈕。 部署調整為最小複本計數 1 的新修訂。 如需詳細資訊,請參閱在 Azure 容器應用程式中調整
  6. 在 [記錄資料流] 頁面中,將 [記錄] 設定 為 [主控台] 或 [系統]

使用診斷並解決問題工具

您可以使用「診斷並解決問題」工具,找出容器應用程式的健康情況、組態和效能問題。

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 區段下,選取容器應用程式的名稱。
  4. 在導覽列中,選取 [診斷並解決問題]
  5. 在 [診斷並解決問題] 頁面中,選取其中一個 [疑難排解類別]
  6. 選取導覽列中的其中一個類別,以尋找解決容器應用程式問題的方法。

確認容器映像的存取範圍

如果您在嘗試部署新的修訂時收到錯誤訊息,請確認容器應用程式能夠提取您的容器映像。

  • 確定您的容器環境防火牆不會封鎖對容器登錄的存取。 如需詳細資訊,請參閱使用使用者定義的路由控制輸出流量
  • 如果您現有的 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 容器應用程式環境中的網路功能

檢閱輸入設定

容器應用程式的輸入設定會透過一組規則強制執行,以控制將外部和內部流量路由傳送至容器應用程式。 如果您無法連線到容器應用程式,請檢閱這些輸入設定,以確定您的輸入設定不會封鎖要求。

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 下,選取容器應用程式的名稱。
  4. 在導覽列中,展開 [設定],然後選取 [輸入]
問題 動作
是否啟用輸入? 確認已選取 [已啟用] 核取方塊。
您要允許外部輸入嗎? 確認 [輸入流量] 已設定為 [接受來自任何地方的流量]。 如果您的容器應用程式並未接聽 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 來解析要求。

  1. 如果您的 VNet 使用自訂 DNS 伺服器,而非由 Azure 提供的預設 DNS 伺服器,請將 DNS 伺服器設定為會將未解析的 DNS 查詢轉送至 168.63.129.16
  2. 設定 NSG 或防火牆時,請勿封鎖 168.63.129.16 位址。

如需詳細資訊,請參閱 Azure 容器應用程式環境中的網路功能

確認健全狀態探查組態

針對使用 TCP 作為傳輸的所有健全狀態探查類型 (活躍度、整備程度和啟動),請確認其連接埠號碼符合您為容器應用程式設定的輸入目標連接埠。

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 下,選取容器應用程式的名稱。
  4. 在導覽列中,展開 [應用程式],然後選取 [容器]
  5. 在 [容器] 頁面中,選取 [健全狀態探查]
  6. 展開 [活躍度探查]、[整備程度探查] 和 [啟動探查]
  7. 針對每個探查,請確認 [連接埠] 值是否正確。

更新 [連接埠] 值,如下所示:

  1. 選取 [編輯並部署] 以建立新的修訂。
  2. 在 [建立並部署新的修訂] 頁面中,選取容器映像旁的核取方塊,然後選取 [編輯]
  3. 在 [編輯容器] 視窗中,選取 [健全狀態探查]
  4. 展開 [活躍度探查]、[整備程度探查] 和 [啟動探查]
  5. 針對每個探查,編輯 [連接埠] 值。
  6. 選取儲存按鈕。
  7. 在 [建立並部署新的修訂版本] 頁面中,選取 [建立] 按鈕。

設定延長啟動時間的健全狀態探查

如果啟用輸入,則如果未針對每個類型定義任何探查,則會自動將下列預設探查新增至主要應用程式容器。

以下是每個探查類型的預設值。

屬性 啟動 準備就緒 活躍度:
通訊協定 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 中很常見),您可能需要據以自訂即時和整備程度探查 [初始延遲 (秒)] 屬性。 您可以檢視記錄,以查看容器應用程式的一般啟動時間。

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 下,選取容器應用程式的名稱。
  4. 在導覽列中,展開 [應用程式],然後選取 [容器]
  5. 在 [容器] 頁面中,選取 [健全狀態探查]
  6. 選取 [編輯並部署] 以建立新的修訂。
  7. 在 [建立並部署新的修訂] 頁面中,選取容器映像旁的核取方塊,然後選取 [編輯]
  8. 在 [編輯容器] 視窗中,選取 [健全狀態探查]
  9. 展開 [活躍度探查]
  10. 如果選取了 [啟用活躍度探查],請增加 [初始延遲 (秒)] 的值。
  11. 展開 [整備程度探查]
  12. 如果選取了 [啟用整備程度探查],請增加 [初始延遲 (秒)] 的值。
  13. 選取 [儲存]。
  14. 在 [建立並部署新的修訂版本] 頁面中,選取 [建立] 按鈕。

然後,您可以檢視記錄,以查看容器應用程式是否成功啟動。

如需詳細資訊,請參閱健全狀態探查

確認流量已路由傳送至正確的修訂

如果您的容器應用程式未如預期般運作,問題可能是要求會路由傳送至過時的修訂。

  1. 登入 Azure 入口網站
  2. 在 [搜尋] 列中,輸入您的容器應用程式名稱。
  3. 在 [資源] 下,選取容器應用程式的名稱。
  4. 在導覽列中,展開 [應用程式],然後選取 [修訂]

如果 [修訂模式] 設定為 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。

  1. 識別您嘗試刪除的環境所使用的 VNet。 將 <PLACEHOLDERS> 取代為您的值。

    az containerapp env show --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT>
    

    在輸出中,尋找 infrastructureSubnetId 並記下 VNet 識別符。 範例 VNet 識別子為 vNet::myVNet.id

  2. 手動刪除 VNet:

    az network vnet delete --resource-group <RESOURCE_GROUP> --name <VNET_ID>
    
  3. 刪除 Azure Container Apps 環境:

    az containerapp env delete --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT> --yes
    

下一步